仅传递第二个模板参数的方法

时间:2019-02-14 15:39:23

标签: c++ templates parameter-passing template-deduction default-arguments

因此,我有一个模板函数,该函数具有默认的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>

1 个答案:

答案 0 :(得分:15)

只需重新排序模板参数:

template <typename S = int, typename F>
void foo(const F param);

模板可以在任何地方使用默认设置。最后,应提供,默认或推导所有模板参数。