c++ - 类模板特化,C++,模板参数列表中的参数 2 不匹配

标签 c++ templates

我有一个模板:

template <typename T, int size>
class Array
{

    T A[size];

public:

    T& operator[](int index) ;

};

template <typename T, int size>
T& Array<T,size>::operator[](int index)
{
    if (index>=size || index<0)
        return A[0];
    else
        return A[index];
}

及其特化类:

typedef struct Data
{
    int id;
    char name[10];
    double temp;
    double quantity;
}Data;

template <>
class Array<Data, int>
{
};

我尝试使用它:

int main()
{
    Array<Data, int> tab;
    return 0;

}

但是我收到了这个错误,我真的不知道为什么:

error: type/value mismatch at argument 2 in template parameter list for ‘template class Array’|

怎么了?

很奇怪。我将代码更改为以下代码:

template <>
class Array<Data, 20>
{
};

int main()
{
    Array<Data, 20> tab;
    return 0;
}

现在好了。谢谢!

最佳答案

我只能猜测您实际上想要为 Array<T, size> 创建模板特化其中 T=Datasize未指定。

template <int size>
class Array<Data, size> // partial specialization
{
};

实例化模板时,必须指定一个常量大小:

int main()
{
    Array<Data, 5> tab; // size=5 for this example
    return 0;
}

关于c++ - 类模板特化,C++,模板参数列表中的参数 2 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39932288/

相关文章:

C++ vector 的唯一指针实践

javascript - Jade模板,扩展模板后添加到头部

python - [GAE]模板中如何设置 `inline`

c++ - 非静态成员函数c++的无效使用

C++ 分配一个变量指针地址

c++ - C++ 中 unordered_map 的错误?

c++ - 我们可以在 C++ 中多次创建具有相同名称的相同对象吗

javascript - 在脚本标签中使用 HTML/模板进行 HTML Dom 注入(inject)

python - 将链接列表传递给 Django 模板

c++ - 模板化类的特殊继承导致成员函数返回模板化类类型而不是继承类类型