C ++で、メッセージを汎用構造体でラップするメッセージングシステムがあるとします。
template<typename T>
struct Message
{
std::string Name;
T Data;
};
この構造体の純粋に汎用バージョンを使用する必要がある関数を含むインターフェースもあります。
class Interface
{
public:
virtual ~Interface() { }
virtual void Receive(Message& message) = 0;
virtual Message Send() = 0;
};
ただし、Message
タイプに名前を付けることはなくなりました。Message<float>
名前のMessage<std::string>
種類など。実装するクラスはInterface
異なるものをキャッチしたいのでMessage
、特定のタイプを定義することはできません。
これを修正するために私が考えることができる唯一の方法は、テンプレートを取り除いて継承を使用することですが、その後、コード全体にIntMessage
andのようなものが散らばっていて、BoolMessage
非常に醜いように見えます。私がこれを私が望む方法でどのように行うことができるかについての考えはありますか?