c++ - 调用模板函数的常规方式

标签 c++ templates

struct A
{
    template <class U> 
    void f(U)
    {

    }
};

template <class T>
void f(T t) 
{
    A a;
    a.template f<int>(t);
    a.template f<>(t);
    a.f<int>(t);
    a.f<>(t);
    a.f(t);
}

至少在 MSVC2010 下上面的代码可以正常编译。

在调用A.f 的所有方式中,有什么优惠的方式吗?

有什么区别吗?

最佳答案

嗯,a类型为 A ,在此上下文中不是依赖类型。所以 template关键字不是必需的,它仅用于混淆代码——不要使用它。

调用模板而不提供任何参数的版本同样不会改变行为,只会降低代码的可读性——也不要使用它。

在剩下的两个候选人之间,a.f(t)a.f<int>(t) , 在大多数情况下使用第一个,如果编译器无法推断类型则使用第二个。

关于c++ - 调用模板函数的常规方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141727/

相关文章:

c++ - 用字符分隔数字

c++ - 重载 >> 运算符未在输入上设置属性

C++ 将 RAII 与多态性和堆栈分配结合使用

c++ - 在编译时对整数常量元组进行排序

php - 通过 AJAX 模板化动态加载内容的最佳方法?

c++ - 泛型 lambda 的实例化

python - 使用 OpenCv 和 python 进行 RGB-D 姿态估计

c++ - 下面的比较器函数在 C++ 中是如何工作的?

c++ - 如何存储/检索成员函数指针以用作模板参数?

c++ - 计算编译时数组时编译器相关错误