要するに問題: c ++11で提案された機能をプレーンなc++で
どのように実装できるでしょうか?static if
歴史と元々の問題:
最近、私はこのような問題を思いついた。Sender
次のようなインターフェイスを持つクラスが必要です
class Sender
{
void sendMessage( ... );
void sendRequest( ... );
void sendFile( ... );
// lots of different send methods, not important actually
}
場合によっては、DoubleSender、つまりこのクラスのインスタンスを作成する必要があります。これは、そのメソッドを2回呼び出します。つまり、たとえばメソッドを呼び出すときはsendMessage(...)
、同じメッセージを2回送信する必要があります。
私の解決策:
最初の
アプローチ:メンバーを用意し、各メソッド呼び出しの最後にチェックを行いますisDouble
sendMessage(...) { ... if( isDouble ) { sendMessage( ... ); }
ええと、私はこれを望んでいません。なぜなら、実際にはごく最近二重投稿が必要になり、タイムクリティカルセクションのコードのこの部分は98%パッシブになるからです。
2番目のアプローチ:から
クラスを継承し、次のようなメソッドを実装します。DoubleSender
Sender
void DoubleSender::sendMessage( ... )
{
Sender::sendMessage(...);
Sender::sendMessage(...);
}
send..
まあ、これは許容できますが、不快なコードの多くのスペースを必要とします(さまざまなメソッドがたくさんあるため、実際には多くのスペースが必要です。
3番目のアプローチ:
c++11を使用していると想像してください:)。次に、このクラスをジェネリックにし、次を使用して一時的な引数に従ってコードの必要な部分を生成できますstatic if
。
enum SenderType { Single, Double };
template<SenderType T>
class Sender
{
void sendMessage(...)
{
// do stuff
static if ( T == Single )
{
sendMessage(...);
}
}
};
これは以前のソリューションよりも短く、読みやすく、追加のコードを生成しません...それはc ++ 11ですが、残念ながら私の作業では使用できません。
だから、ここで私は私の質問に行き着きました-どうすればstatic if
c ++でアナログを実装できますか?
また、私の元の問題を解決する方法について他の提案をいただければ幸いです。
前もって感謝します。