所以我有一个模板函数,它有一个默认的第二个参数。它的第一个参数可以推导出来,所以类似于:
template <typename F, typename S = int>
void foo(const F param)
这在一般情况下工作正常,我只会打电话给foo(bar)
。但是在我要指定第二个参数的情况下,我不能这样做:foo<char>(bar)
,因为char
被视为F
。显然情况并非如此,因为bar
不是char
,所以F
应该是可以推断的。
有没有办法我只能传递一个适用于S
的模板参数,仍然会推导出F
,并且在一般情况下仍然默认为S
?
只需重新排序模板参数:
template <typename S = int, typename F>
void foo(const F param);
模板可以在任何地方都有默认值。最后,应提供,默认或推导出所有模板参数。