は基本的に私は以下のようなコードの多くを書いて、今日自分自身を発見した:"Redirect"クラスメンバー関数?
#define VAL_1 0
#define VAL_2 1
class A {
public:
void memberA();
void memberB();
...
void write(uin32_t address);
}
void
A::
memberA() {
this->write(VAL_1);
}
void
A::
memberB() {
this->write(VAL_2);
}
...
だから、基本的に、私は実際には異なる引数で同じ機能write
を呼び出して行い、いくつかのタスクのための「かわいい」の名前memberA
、memberB
を持っています。値VAL_0
とVAL_1
は必ずしも自分のクラスを使用してコードすることは知られていません。 write
がある時点で公開されている可能性もありますが、実装の詳細はmemberA
またはmemberB
のどちらでもありません。
基本的には今度は同じコード行this->write(...)
を何度も繰り返しています。私はこの手順をバイパスし、それぞれの書き込みをすぐに呼び出すソリューションを探しています。おそらく一致する引数を指定して、多少の基本クラスからC++コンストラクタのように関数の引数の上渡しの種類:
#define VAL_1 0
#define VAL_2 1
class A {
public:
bool memberA() : write(VAL_1);
bool memberB() : write(VAL_2);
...
bool write(uin32_t address);
}
私はBoost.Bindで何かまたはいくつかの巧妙なテンプレートコードがあるかもしれないかどうかを思ったんだけど私はこの種のことを達成できますか?あなたはクラス定義にインラインであなたのmemberX
関数を作り、そしてあなたが冗長this
参照を避ける場合は、あなたが書くためにあまりにも多くの余分持っていない場合は
おかげで、
FROB
さて、私はそれを理解しています。しかし、 'memberA'と' memberB'は子クラスに異なる実装を持っていますので、あなたの解決策でこれらを上書きすることはできません... – FRob
私の提案は、memberAとmemberB関数をまったく持っているのではなく、クライアントがmy_a.write(address_val1)を書かせるだけの目的で、これらの関数を完全に削除するようにします。ところで、あなたは最適化としてこれをやろうとしていますか?その場合、コンパイラがその最適化を適用した後に、memberAとmemberBは通常、オーバーヘッドがゼロになるため、プロセッサ効率の観点からそれらの関数を書くコストは効果的に*ゼロ*になります。これらの関数を書くのが面倒だと分かったら、それは別のものです。しかし、マクロを使って... – stinky472
クラスメソッドは一般的にハックと見なされます。通常のプロダクション環境でコードレビューに合格しないと、プリプロセッサを介して既にこのような1ライナーであるものを省略することができます。 – stinky472