我想以某种方式定义一个基本模板类,以便它采用可变参数模板参数并为每个参数定义一个虚拟方法,其中参数是参数类型。使用可变参数模板的参数定义多个方法
E.g. 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>...
{
};
不幸的是,富变得模糊。我无法获得语法的工作。有没有办法?
我知道,或者,我可以从BaseSingle递归继承并传递其余的参数。这是否有性能影响?
递归继承是正常的,例如, 'std :: tuple'就是这样实现的。我不明白你为什么会遇到性能问题,你的函数甚至不会相互覆盖,也不会在运行时调用overriden成员来传递参数。 – doublep 2012-03-09 20:40:19
[在variadic模板中使用声明]的可能的重复(http://stackoverflow.com/questions/7870498/using-declaration-in-variadic-template) – 2012-03-09 20:46:39
* std :: tuple的一些*实现使用递归继承。但好的不是。 ;-) – 2012-03-09 21:51:31