加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何解析/推导模板参数?

发布时间:2020-12-16 05:01:41 所属栏目:百科 来源:网络整理
导读:在学习和试验模板时,我遇到了一些我无法完全掌握的东西. class sample{ public: sample(int a = 0) {}};template typename T1,typename T2void add(T1 a) // Replace T1 with T2 resolves compilation error.{}int main(){ addsample(3); return 0;} 上面的
在学习和试验模板时,我遇到了一些我无法完全掌握的东西.
class sample
{
    public:
        sample(int a = 0) {}
};

template <typename T1,typename T2>
void add(T1 a) // Replace T1 with T2 resolves compilation error.
{}

int main()
{
    add<sample>(3); 
    return 0;
}

上面的代码导致编译错误(03和c 0x).但是当我将添加的参数类型从T1更改为T2时,它就可以了.对于nm,创建的原型是add(sample,int)[T1 = sample,T2 = int].为什么编译失败,T1作为参数类型而不是T2?

解决方法

有两种方法可以指定模板参数:显式或隐式.

这将是明确的:

template<typename T>
void do_something(T value) {};

do_something<float>(6);  // T is float

这将是隐含的:

int x;

do_something(x);  // since first argument is T and x is int,T is int

在你的情况下:

template <typename T1,typename T2> void add(T1 a);
add<sample>(3);  // T1 is explcitly sample,T2 is unknown

案例2:

template <typename T1,typename T2> void add(T2 a);
add<sample>(3);  // T1 is explcitly sample,T2 is implicitly int

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读