【发布时间】:2020-12-16 13:57:00
【问题描述】:
我想为每种类型的可变参数模板类创建一个函数重载。这可能吗?
template<typename ...args>
class Example {
virtual void doSomething(args(0) arg) { ... }
virtual void doSomething(args(1) arg) { ... }
/// etc... implementations are the same, but I need access to the type
}
我尝试使用折叠表达式,但我很确定我没有走在正确的轨道上。因为我需要函数是虚拟的,所以我不能将它们声明为 template<typename T> virtual void doSomething(T arg),因为模板虚拟函数是不允许的。
【问题讨论】:
-
但是模板的想法是让用户决定他将要实例化类的类型,所以在编写可变参数模板时,你不知道会有多少参数.在编写代码时,您如何知道必须提供多少重载?如果实现相同,则不应将其设为可变参数模板。考虑到实现是相同的,只需一个普通的
template<typename T>和一个函数virtual void doSomething(T arg) { ... }就可以了。 -
你能给我们一个更详细的例子来说明你试图实现的目标吗?
Example层次结构的示例、doSomething内部内容的伪代码以及使用层次结构的用例。 -
嗨。我的回答能满足你的问题吗?如果是,请接受。如果没有,请告诉我(当然是在那个答案下)你对解决方案还有什么期望,我错过了。
标签: c++ templates types overloading variadic-templates