首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >template<typename> template <typename>的作用是什么?

template<typename> template <typename>的作用是什么?
EN

Stack Overflow用户
提问于 2020-09-15 15:42:18
回答 2查看 796关注 0票数 3

最近我偶然发现了这样一段代码:

代码语言:javascript
复制
template <typename Ta> template <typename Tb>
void SomeClass<Ta>::Function() {}

有一个模板函数,但是它的语法很奇怪,我真的不太明白。是干什么的呢?离template<template<typename Ta>>近吗?

我从来没有遇到过这样的语法,我很困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-15 15:46:23

有时它需要的只是一个完整的示例:

代码语言:javascript
复制
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>();
}

它是类模板的方法模板的定义。

票数 11
EN

Stack Overflow用户

发布于 2020-09-15 17:15:15

有时,在编写模板时,您需要与兼容对象兼容。例如,intdouble是相互兼容的。但是如果你有一个模板类对象,比如说Something<int>Something<double>,而你试图给它们赋值,它将不会工作。尤其是在编写复制或移动赋值运算符或构造函数时。假设我们有一个类模板Something

代码语言:javascript
复制
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);
}

如果您尝试这样做,它将不会编译。

要使其编译,您可以创建复制构造函数的模板,如本例所示。为了让它编译,你必须像这样编译。

代码语言:javascript
复制
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>都属于不同的类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63897269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档