【发布时间】:2019-04-22 04:38:17
【问题描述】:
我已经在原始模板类的基础上制作了一个专门的模板,如下所示:
基础模板:
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*。但是,编译代码时没有错误。所以我想知道在类模板专业化中有没有这样的类型条件。
【问题讨论】:
-
特化中的类型数量必须与原始非特化模板中的类型数量相匹配。除此之外,我无法说出你在问什么。不同的模板类型不相关,所以对它们没有要求……它们是完全不相关的类型,只是根据提供的类型选择。
-
函数特化不是这样的——在特定情况下是这样,但如果参数是模板类型则不是这样。模板特化选择是在编译时完成的,因此它们不需要完全相同,因为它们的调用可以提前知道并且设置不同。
标签: c++