在 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
的 ,我不能只定义一个特定的类型。
我能想到解决这个问题的唯一方法是撕掉模板并使用继承,但是我会在我的代码中乱扔诸如 and 之类的东西IntMessage
,BoolMessage
这看起来非常难看。关于如何以我想要的方式做到这一点的任何想法?