显式模板专门化
Explicit template specialization
本文关键字:专门化 更新时间:2023-10-16
我不想问这样一个笼统的问题,但下面的代码是显式模板专门化的练习。我一直收到错误:
c: \users\***\documents\visual studio 2010\projects\template array\template array\array.h(49):错误C2910:"array::{ctor}":不能显式专用
#ifndef ARRAY_H
#define ARRAY_H
template <typename t>`
class Array
{
public:
Array(int);
int getSize()
{
return size;
}
void setSize(int s)
{
size = s;
}
void setArray(int place, t value)
{
myArray[place] = value;
}
t getArray(int place)
{
return myArray[place];
}
private:
int size;
t *myArray;
};
template<typename t>
Array<t>::Array(int s=10)
{
setSize(s);
myArray = new t[getSize()];
}
template<>
class Array<float>
{
public:
Array();
};
template<>
Array<float>::Array()
{
cout<<"Error";
}
#endif
感谢
专业化构造函数的实现不是模板!也就是说,你只想写:
Array<float>::Array()
{
std::cout << "Error";
}
实际上,您似乎想限制"Array"类模板的使用,使其不能与"float"一起使用,在这种情况下,您可能只想声明,而不想define您专门化将运行时错误转化为编译时错误:
template <> class Array<float>;
当然,防止类实例化的方法有很多变化。然而,创建运行时错误似乎是最糟糕的选择。
相关文章:
- 是否可以对零模板参数进行模板专门化
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何基于模板化类的基类专门化成员函数
- 如何为指向复杂值的迭代器专门化算法?
- 专门化模板覆盖函数/避免对象切片
- 我能否根据其运算符()的签名专门化可变参数模板参数
- 如何使用模板化类专门化模板化函数?
- 线程 std::调用未知类型,无法专门化函数错误
- 输入两个不专门化大小的矩阵
- 如何在模板类中专门化赋值运算符?
- 如何专门化容器和枚举的模板
- Clang拒绝类模板的嵌套类仅通过专门化定义的代码是正确的吗
- 取消专门化C++模板参数
- SFINAE的变分变量模板专门化
- 如何在编译时专门化大型模板函数中的小部分
- 如何在c++运算符()中专门化调用模板
- 模板函数,其中一个参数需要专门化,而另一个不需要
- 如何专门化字符串数组的模板?
- 如何专门化模板
- 如何避免为模板化迭代器的每个可能的实例化专门化iterator_traits?