所以我有一个模板函数,该功能具有默认的2 nd 参数。可以推导1 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
?
只是重新排序模板参数:
template <typename S = int, typename F>
void foo(const F param);
模板可以在任何位置都有默认值。最后,应提供所有模板参数,默认或推导。