【发布时间】:2022-01-03 16:31:35
【问题描述】:
我有一个基类,它通过创建一个产生线程、侦听队列并处理接收到的消息的服务器来实现所有平凡的东西。 然后将这些消息传递给纯虚函数:
void ProcMsg(void* msg) = 0;
在实现派生类的时候实现ProcMsg我想把void* msg改成一个指针,作为具体的消息结构定义MyMsgType* msg。是否有一种语言结构可以让我这样做,或者是在ProcMsg 实现中将void* 重新转换为MyMsgType* 的唯一方法。
我唯一找到的是模板,但我希望有更简单的方法。
【问题讨论】:
-
是的,模板。听起来 CRTP 可以在这里提供帮助
-
你可以在这个虚函数的类之前声明
class MyMsgType;(或者它的基类),你不需要使用void*。 -
由于我无法捕捉到真正的用例,我希望拥有一个虚函数和模板永远不会起作用。它看起来更像是所有类型的重载......但我不确定你真正想要设计什么。在这种情况下,
std::variant也可以提供帮助...您有必要在一个最小的示例中向我们展示您想要做什么! -
为什么不用模板?如果您想要低开销,这似乎就是您所需要的。
-
void ProcMsg(void* msg) = 0;-- 一旦参数为void *,你就失去了msg实际指向的所有信息。
标签: c++ parameter-passing pure-virtual