【发布时间】:2012-03-09 20:06:09
【问题描述】:
我想以某种方式定义一个基本模板类,以便它接受可变模板参数并为每个参数定义一个虚拟方法,其中参数是参数类型。
例如Base<int, bool, string> 应该给我 3 个虚拟方法:Foo(int)、Foo(bool) 和 Foo(string)。
我尝试了以下方法:
template <typename Param>
struct BaseSingle
{
virtual void Foo(Param) {};
};
template <typename... Params>
struct Base : public BaseSingle<Params>...
{
};
不幸的是,Foo 变得模棱两可。我无法让using BaseSingle<Params>::Foo... 语法工作。有什么办法吗?
我知道,或者,我可以递归地从 BaseSingle 继承并传入剩余的参数。是否有性能影响?
【问题讨论】:
-
递归继承是正常的,例如
std::tuple就是这样实现的。我不明白为什么你会受到性能影响,你的函数甚至不会相互覆盖,也不会在运行时调用被覆盖的成员传递参数。 -
一些实现
std::tuple使用递归继承。但好人没有。 ;-)
标签: c++ c++11 variadic-templates