c++ 函数模板指定第二个模板参数类型

标签 c++ templates

刚开始学习模板编程,有如下代码,

template<typename T, typename U>
void add(T x, U y)
{
    cout<< x + y <<endl;
}

我可以这样调用它,

add(1, 2);
add<int, int>(1, 2);
add<int>(1, 2.0);

在第三种情况下,我相信这意味着我指定了 [T=int],编译器将推断出 [U=double]

我的问题是如何明确指定第二个参数类型?

最佳答案

add(1,(int)2.0);呢? .

理论上根据模板参数推导规则,这会导致第二个模板参数被推导为int .所以这完全等同于这个假设的语法add<U=int>(1,2.0);

所以这是指定第二个模板参数的方法!

如果第二个模板参数是不可扣除的,则不可能找到等效语法:

template<class T>
struct t_{
  using type = T;
  };

template<class T,class U>
auto add(T, typename t_<U>::type);

关于c++ 函数模板指定第二个模板参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49667331/

相关文章:

c++ - 核心常量表达式和数组索引

c++ - ODBC 连接未打开

ios - 在 XCode 4+ 中创建/编辑子类模板

c++ - 根据派生类型选择类的显式特化

c++ - 这个 SFINAE 模式有名字吗?

c++ - 什么时候应该在模板函数中使用 typename?

c++ - 链接 C++ 代码的问题

c++ - 如何删除包含指向结构的指针的列表的对象?

Java 函数从 C++ 代码 Eclipse jni 获取结果

ruby - 什么模板系统使用 <?r ... ?>