只传递第二个模板参数的方法
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);
模板可以在任何地方有默认值。最后,应提供、默认或推导所有模板参数。
所以我有一个模板函数,它有一个默认的 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);
模板可以在任何地方有默认值。最后,应提供、默认或推导所有模板参数。