【发布时间】:2018-02-15 19:06:37
【问题描述】:
我正在用 C++ 编写,我想将未知类型(仅在运行时已知)传递给纯虚函数:
virtual void DoSomething(??? data);
其中DoSomething 是派生类中纯虚函数的实现。
我计划使用模板,但事实证明虚函数和模板不能一起工作:Can a C++ class member function template be virtual?
我想避免对传递给函数的所有类使用基类(类似于 C# 中的 object)。
提前致谢
【问题讨论】:
-
你能说得更具体些吗?如何在函数内部使用数据?数据类型的要求是什么?例如。只有几个已知的类,或者您打算接受任何具有特定方法等的类?
-
您的问题需要缩小一点。你知道类型的范围,你想让它们被自动推导出来吗?最简单的答案是“使用 void*”,更好的答案可能是 Story Teller。这完全取决于您的用例。
-
我很好奇,看着答案,是否有可能获得相同的结果而无需在
doSomething上进行任何转换。类似于以某种方式封装类型而不必将doSomething设为模板,并使用decltype检索该类型,即一种虚拟工厂方法... -
发送未知类型参数有什么用?参数是用于使用的,因为已证实这看起来是一种错误的方法。
-
使用动态多态实现双重调度的常用方法是访问者模式en.wikipedia.org/wiki/Visitor_pattern
标签: c++ templates virtual-functions