因此,我有一个模板函数,该函数具有默认的2 nd 参数。可以推导出第一个 st 参数,所以类似:
template <typename F, typename S = int>
void foo(const F param)
在一般情况下,此方法工作正常,我将仅致电foo(bar)
。但是在要指定第二个参数的情况下,我不能这样做:foo<char>(bar)
,因为char
被当作F
。显然不是这样,因为bar
不是char
,所以F
应该是可推论的。
是否有一种方法,我只能在此处传递一个适用于S
的模板参数,仍然推导F
,并且在一般情况下仍默认为S
? / p>
答案 0 :(得分:15)
只需重新排序模板参数:
template <typename S = int, typename F>
void foo(const F param);
模板可以在任何地方使用默认设置。最后,应提供,默认或推导所有模板参数。