我有这样的代码,但是编译器说错误(错误C2913:显式特化;' Vector'不是类模板的特化d:\ test_folder \ consoleapplication1 \ consoleapplication1 \ consoleapplication1.cpp 28 1 ConsoleApplication1 ):
#include <iostream>
template <int N, int ... T>
class Vector
{
public:
static void print_arguments(void)
{
std::cout << N << " : " << std::endl;
Vector<T>::print_argumetns();
}
protected:
private:
};
template <>
class Vector<>
{
public:
static void print_arguments(void)
{
}
protected:
private:
};
int main(void)
{
std::cout << "Hello world" << std::endl;
int i = 0;
std::cin >> i;
return 0;
}
答案 0 :(得分:6)
您无法在没有模板参数的情况下创建Vector
专精,因为Vector
至少需要一个参数。
您可以做的是声明主模板采用任意数量的模板参数,然后将这两种情况定义为特化:
//primary template
template <int... Ns>
class Vector;
//this is now a specialization
template <int N, int ... T>
class Vector<N,T...>
{
//...
};
template <>
class Vector<>
{
//...
};
答案 1 :(得分:0)
你可能想要的是:
template <int N, int ... T>
class Vector
{
public:
static void print_arguments(void)
{
std::cout << N << " : " << std::endl;
Vector<T...>::print_arguments();
}
protected:
private:
};
template <int N>
class Vector<N>
{
public:
static void print_arguments(void)
{
std::cout << N << " : " << std::endl;
}
protected:
private:
};
第二个是“终止”部分特化,仅在使用一个参数时使用。