将泛型结构作为接口中的参数传递
Passing a generic struct as a parameter in an interface
在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
和 BoolMessage
,这看起来非常丑陋。关于我如何以我想要的方式做到这一点的任何想法?
一个简单的方法是将
Message
类型拆分为层次结构:
struct MessageBase {
std::string Name;
};
template<typename T>
struct Message : MessageBase
{
T Data;
};
然后,您只需通过接口传递MessageBase&
。
[以前的是行不通的。该函数将能够接受任何MessageBase&
对象,但Receive
似乎是关于在参数中存储类型未知的消息编译时。虽然如果你不介意动态分配,你可以有一个保存名称和指向MessageBase
的指针的Message
,然后是MessageImpl
的不同实现(上面的模板)]
另一种常见的方法是将所有可能的消息添加到联合中并传递联合。
为什么不将接口定义为模板?
template<typename T>
class Interface
{
public:
virtual ~Interface() { }
virtual void Receive(Message<T>& message) = 0;
virtual Message<T> Send() = 0;
};
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用指向成员的指针将成员函数作为参数传递
- 如何将参数传递给正在使用模板的类
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将部分流作为参数传递
- 我正在开发服务器,ip作为参数传递不起作用
- 将成员函数指针作为参数传递给模板方法
- 如何在C++中将迭代器作为函数参数传递
- 将附加参数传递给使用 beast::bind_front_handler 调用的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 将参数传递为"const"的奇怪效果
- 如何在 c++ 中将函数作为参数传递?
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- 将泛型结构作为接口中的参数传递
- C++:像在 Java 中一样将接口作为参数传递
- 将接口或引用作为参数传递给函数