【问题标题】:Implementing a pure virtual function Change parameter from void* to specific type pointer实现纯虚函数 将参数从 void* 更改为特定类型指针
【发布时间】: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


【解决方案1】:

如果您使用 void * 的原因除了与一些古老的 C 库接口之外,您可能需要重新考虑您的架构。

我将为所有要传递的消息创建一个基类,然后在那些称为process 或类似名称的消息上创建一个虚拟方法。如果这太过分了,那么您可能必须有一个 messageType 字段并对其进行查询,然后进行一些类型转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2021-08-08
    • 2016-11-23
    • 2019-04-13
    • 2016-03-07
    相关资源
    最近更新 更多