【发布时间】:2017-07-08 09:54:08
【问题描述】:
我需要找到一种方法在给定一组模板参数的情况下递归构建一个类,以便该类继承自自身并为模板参数列表中的当前第一个模板参数构建一个方法f,然后继承自自己通过传递列表的其余部分。
所以,基本上我想为一个类C实现如下接口:
C<T1, T2, T3> c;
c 现在有方法C::f(T1)、C::f(T2) 和C::f(T3)
到目前为止,我的方法是这样的:
// primary template
template <class H, class...>
class C {};
// base case where class... is empty
template <class H, class...>
class C<H>
{
public:
void f(const H& h){
// std::cout << typeid(h).name() << "\n";
}
};
// recursive case where T is nonempty
template <class H, class... T>
class C : public C<T...>
{
public:
void f(const H& h){
// std::cout << typeid(h).name() << "\n";
}
};
据我所知,这实际上并没有编译
错误:重新定义“C”类 C:公共 C
我的方法基本上是可行的,只是语义和/或语法上无效的代码问题,还是这种方法原则上不起作用?
【问题讨论】:
标签: c++ inheritance recursion overloading variadic-templates