我刚开始学习模板编程,以下是我的代码:
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);
add<auto, int>(1, 2.0);
这行代码是类似于 C++ 的语法,但并不存在于该语言中。这可能会被提议用于 C++20 标准。它的意思是将整数 1 和浮点数 2.0 相加,使用自动类型推导来确定返回值类型为 int。 - Aconcagua
add<_, double>
。 - Jarod42U
但不包括T
吗?这是不可能的。 - Some programmer dudeadd<int,double>(1, 2.0)
或者add<int>(1, float(2.0))
可能是你想要的,但这似乎是一个过于显然的解决方案。 - Ken Y-N