C++ 如何专门化没有参数的模板类?
我有这样的代码,但编译器说明了错误(错误C2913:显式专门化;'Vector'不是类模板的专门化d:\test\u folder\consoleapplication1\consoleapplication1\consoleapplication1.cpp 28 1 consoleapplication1 ):C++ 如何专门化没有参数的模板类?,c++,templates,C++,Templates,我有这样的代码,但编译器说明了错误(错误C2913:显式专门化;'Vector'不是类模板的专门化d:\test\u folder\consoleapplication1\consoleapplication1\consoleapplication1.cpp 28 1 consoleapplication1 ): #包括 样板 类向量 { 公众: 静态void打印参数(void) { std::cout您不能创建没有模板参数的Vector专门化,因为Vector至少需要一个模板参数 您可以改为声
#包括
样板
类向量
{
公众:
静态void打印参数(void)
{
std::cout您不能创建没有模板参数的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<>
{
//...
};
//主模板
样板
类向量;
//这现在是一种专门化
样板
类向量
{
//...
};
样板
类向量
{
//...
};
您不能在没有模板参数的情况下创建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<>
{
//...
};
//主模板
样板
类向量;
//这现在是一种专门化
样板
类向量
{
//...
};
样板
类向量
{
//...
};
您可能想要的是:
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:
};
模板
类向量
{
公众:
静态void打印参数(void)
{
你可能想要的是:
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:
};
模板
类向量
{
公众:
静态void打印参数(void)
{
如果没有参数,它不是专门化,我更愿意称之为“泛化”这是不可能的。换句话说,我不能创建没有任何参数的模板?我不明白,你为什么要这样做?这应该如何使用?出于教育目的,我只想创建一个类,它将按排序顺序打印自己的参数。结果是,我错了,请看格子答案…没有参数,它不是一个s专业化,我更愿意称之为“泛化”这是不可能的。换句话说,我不能创建没有任何参数的模板?我不明白,你为什么要这样做?这应该如何使用?出于教育目的,我只想创建一个类,它将按排序顺序打印自己的参数。结果是,我错了,请参见格子答案…太好了!谢谢,但我无法取消derstand,为什么这个版本的代码有效。你能给我一些解释的链接吗?你特别不明白什么?为什么需要主模板声明?因为如果你没有主模板声明,Vector
是一个类模板,它至少需要一个模板参数。对于主模板,Vector
是一个类模板模板可以有任意数量的模板参数,并且在没有模板参数和至少有一个模板参数的情况下有专门化。谢谢,我想我理解Toodgreat!谢谢,但我不明白,为什么这个版本的代码可以工作。请给我一些解释的链接,好吗?你特别不明白什么?为什么prima是否需要Y模板声明?因为如果没有,Vector
是一个类模板,它至少需要一个模板参数。对于主模板,Vector
是一个类模板,它可以有任意数量的模板参数,并且在没有模板参数和至少有一个模板参数时有专门化。谢谢,我想我理解了这个版本在这种情况下是不起作用的,我猜:Vector Vector;是的,塔尔坦喇嘛版本更好,因为它在那种情况下也能起作用,总体思路是一样的。这个版本在这种情况下不起作用,我猜:Vector Vector;是的,塔尔坦喇嘛版本更好,因为它在那种情况下也能起作用,g一般的想法是一样的。