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

Way to Only Pass Second Template Parameter

所以我有一个模板函数,它有一个默认的 2nd 参数。可以推导出第 1st 个参数,所以类似:

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);

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