Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 递归模板类定义的基本情况要求_C++_Class_Recursion_Template Specialization - Fatal编程技术网

C++ 递归模板类定义的基本情况要求

C++ 递归模板类定义的基本情况要求,c++,class,recursion,template-specialization,C++,Class,Recursion,Template Specialization,对于我提出的一个问题,我得到了这样一个建议:使用这样一个通用模式来解决我的问题: template <class... T> class C; template <> class C<> { public: void f() {} }; template <class T, class... Args> class C<T, Args...> : public C<Args...> { public: u

对于我提出的一个问题,我得到了这样一个建议:使用这样一个通用模式来解决我的问题:

template <class... T>
class C;

template <>
class C<>
{
public:
    void f() {}
};

template <class T, class... Args>
class C<T, Args...> : public C<Args...>
{
public:
    using C<Args...>::f;
    void f(const T& t) { /*stuff*/ }
};
应该被选中。但是,这会引发一个错误:

error: too few template parameters in template redeclaration
template <class V>
^~~~~~~~~~~~~~~~~~

note: previous template declaration is here
template <class V, class... >
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
错误:模板重新声明中的模板参数太少
模板
^~~~~~~~~~~~~~~~~~
注意:前面的模板声明在这里
模板
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

所以我的假设是错误的。这实际上是如何工作的,我的适应需要什么样的正确更改?

您正确地忘记了拼写和专门化:

template <class V>
class C<V>
//    ^^^^  you missed this
模板
C类
//^^^^^你错过了这个
这里有两个错误: 第一,不正确的专业化:

template <class V>
class C
{
    //...
};
应该是:

template <class V>
class C<V>
{
    //...
};
using C<V, Args...>::f;
使用C::f;

谢谢,为什么
模板C类中需要
?之后只有一个模板参数,即专门化语法,
C
是基本情况,
C
是单个模板参数的专门化情况。
template <class V>
class C<V>
{
    //...
};
using C<Args...>::f;
using C<V, Args...>::f;