最近我偶然发现了这样一段代码:
template <typename Ta> template <typename Tb>
void SomeClass<Ta>::Function() {}有一个模板函数,但是它的语法很奇怪,我真的不太明白。是干什么的呢?离template<template<typename Ta>>近吗?
我从来没有遇到过这样的语法,我很困惑。
发布于 2020-09-15 15:46:23
有时它需要的只是一个完整的示例:
template <typename Ta>
struct SomeClass {
template <typename Tb>
void Function();
};
template <typename Ta> template <typename Tb>
void SomeClass<Ta>::Function() {}
int main() {
SomeClass<int> sc;
sc.Function<double>();
}它是类模板的方法模板的定义。
发布于 2020-09-15 17:15:15
有时,在编写模板时,您需要与兼容对象兼容。例如,int和double是相互兼容的。但是如果你有一个模板类对象,比如说Something<int>和Something<double>,而你试图给它们赋值,它将不会工作。尤其是在编写复制或移动赋值运算符或构造函数时。假设我们有一个类模板Something。
template <typename T>
class Something {
public:
Something();
Something(const Something& obj) : data(obj.data)
{
};
private:
T data;
};
int main(){
Something<int> number;
Something<double> double_number;
Something<double> newObj(number);
}如果您尝试这样做,它将不会编译。
要使其编译,您可以创建复制构造函数的模板,如本例所示。为了让它编译,你必须像这样编译。
template <typename T>
class Something {
public:
Something();
template<typename E>
Something(const Something<E>& obj);
T get_data() const{
return data;
}
private:
T data;
};
template<typename T>
template <typename E>
Something<T>::Something(const Something<E>& src): data(src.get_data()){
}
int main(){
Something<int> number;
Something<double> double_number;
Something<double> newObj(number);
}注意,我们调用公共方法将data赋值给this对象,因为Something<int>和Something<double>都属于不同的类型。
https://stackoverflow.com/questions/63897269
复制相似问题