我有一个模板:
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=Data
和 size
未指定。
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/