Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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++_Templates - Fatal编程技术网

C++ 如何专门化没有参数的模板类?

C++ 如何专门化没有参数的模板类?,c++,templates,C++,Templates,我有这样的代码,但编译器说明了错误(错误C2913:显式专门化;'Vector'不是类模板的专门化d:\test\u folder\consoleapplication1\consoleapplication1\consoleapplication1.cpp 28 1 consoleapplication1 ): #包括 样板 类向量 { 公众: 静态void打印参数(void) { std::cout您不能创建没有模板参数的Vector专门化,因为Vector至少需要一个模板参数 您可以改为声

我有这样的代码,但编译器说明了错误(错误C2913:显式专门化;'Vector'不是类模板的专门化d:\test\u folder\consoleapplication1\consoleapplication1\consoleapplication1.cpp 28 1 consoleapplication1 ):

#包括
样板
类向量
{
公众:
静态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一般的想法是一样的。