调用模板成员函数

call of template member function

本文关键字:函数 成员 调用      更新时间:2023-10-16

如果我有一个class

class A {
  template<class T>
  void foo(T t);
};

书中称呼foo的方式有什么不同?

a.foo(t)

a.foo<X>(t)

?

a.foo(t)将基本推导出Tt的类型。如果您觉得可以,可以使用这个

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

在第二个变体中,X可能不是t的类型。例如,如果tfloat,但您说a.foo<int>(t),则不会推导出浮点变量,而是整数变量(如果已经不存在),并且会发生floatint的转换。

如果类型相同,则没有差异。然而,在代码的整个生命周期中,人们永远不知道类型是否永远不会改变。