ユニットテストのためにモック(Googleモック)を作成できるように、ほとんどのクラスのインターフェイスを作成した新しいシステムを設計しています。結果として、すべての機能は仮想ですが、問題は私が頻繁にテンプレート仮想関数の問題にこれで実行されているということです。私はマルチディスパッチを行う方法のいくつかの例を見てきましたが、それらはすべてテンプレートのバリエーションを使用しているようですが、それは単純ではないようです。それで、私のコードベース全体がテンプレートで終わって、読み込み/使用やデバッグが難しくなってしまうのでしょうか?インターフェイスベースプログラミングのためにC++仮想テンプレート関数の問題に遭遇しました
または、私は良いインターフェイスを設計していません。ここでは、私がメッセージキューのためのインタフェースを書いている簡単な例を示します。
Class IMessageQueue {
Public:
Virtual int send(const T & value); // I can't do this but this is exactly what I want to do, as send should be able to send any type
};
Class MessageQueue : public IMessageQueue {
Public:
Virtual int send(const T & value) { ... }
};
Class MockMQ : public IMessageQueue {
Public:
Virtual int send(const T & value) {
// mock implementation
}
};
この問題を回避するにはどうすればよいですか?これはほんの一例ですが、インタフェースベースのプログラミングのために、これらのタイプの問題に遭遇します。
のようにすべてのメッセージに共通する特定のインターフェイスを宣言することです、場合それらを仮想化せずに、dynamic_castで型を決定し、その型のテンプレート化されたメンバ関数を呼び出すヘルパ関数を持つことで、私はそれがあなたの特定のケースでどのくらい醜くmaintanableになるかわからない、また私はそれを試みたことがない。 – Sopel