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

前端之家收集整理的这篇文章主要介绍了c – 如何解析/推导模板参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在学习和试验模板时,我遇到了一些我无法完全掌握的东西.
  1. class sample
  2. {
  3. public:
  4. sample(int a = 0) {}
  5. };
  6.  
  7. template <typename T1,typename T2>
  8. void add(T1 a) // Replace T1 with T2 resolves compilation error.
  9. {}
  10.  
  11. int main()
  12. {
  13. add<sample>(3);
  14. return 0;
  15. }

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

解决方法

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

这将是明确的:

  1. template<typename T>
  2. void do_something(T value) {};
  3.  
  4. do_something<float>(6); // T is float

这将是隐含的:

  1. int x;
  2.  
  3. do_something(x); // since first argument is T and x is int,T is int

在你的情况下:

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

案例2:

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

猜你在找的C&C++相关文章