调用模板成员函数

时间:2014-07-21 10:31:09

标签: c++ templates

如果我有课

class A {

  template<class T>
  void foo(T t);

};

本书调用foo的方式有什么区别/方式?

a.foo(t)

a.foo<X>(t)

2 个答案:

答案 0 :(得分:3)

a.foo(t)基本上会将T推断为t的类型。如果这对您没问题,请使用此功能。

a.foo<X>会强制TX,表达式的正确性现在取决于t是否可转换为X。如果您希望将t转换为X,有时您希望如此,但您可以将其写为a.foo(X{t})。第二种形式并不完全等同,因为它也允许显式转换。

答案 1 :(得分:2)

在第二个版本中,X可能不是t的类型。例如,如果tfloat,但您说a.foo<int>(t),则不会推导出浮动变体,而是整数变量(如果尚未存在),并且{{1转换将发生转换为float

如果类型相同,则没有区别。但是,人们永远不知道代码的整个生命周期是否类型永远不会改变。