[英]Conditions for template specialization type?
我已经根据原始模板类制作了一个专门的模板,如下所示:
基础模板:
template <typename T>
class MyData {
public:
MyData(T param) : data(param) {}
T GetData() const {
return data;
}
private:
T data;
};
专业模板:
template <>
class MyData<char*> {
public:
MyData(const char* param) {
int len = static_cast<int>(strlen(param));
data = new char[len + 1];
strcpy_s(data, static_cast<rsize_t>(len + 1), param);
}
~MyData() {
delete[] data;
}
const char* GetData() const {
return data;
}
private:
char* data;
};
这段代码运行良好,但我想知道模板专业化类型是否有任何明确的条件。 例如,如果我进行函数特化,返回类型和所有参数的类型必须相同。
template <>
const char* Add(const char* pLeft, const char* pRight) {
----------- ----------- -----------
| | |
+----------------+------------------+
...
}
在MyData
类中,类的模板类型是char*
但构造const char*
的参数类型是const char*
。 但是,编译代码时没有错误。 所以我想知道在类模板特化中是否有这样的类型条件。
函数专业化和类专业化之间存在差异。 类特化可能是与另一组成员、函数和基类完全不同的类型。 以下编译得很好:
template <typename T>
class Foo
{
public:
void Bar() {}
private:
int val;
};
class Parent {};
template <>
class Foo<char> : public Parent
{
public:
void BarBar() {}
private:
double val;
};
int main()
{
Foo<int> f;
Foo<char> ff;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.