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

问题描述 投票:5回答:1

所以我有一个模板函数,它有一个默认的第二个参数。它的第一个参数可以推导出来,所以类似于:

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

这在一般情况下工作正常,我只会打电话给foo(bar)。但是在我要指定第二个参数的情况下,我不能这样做:foo<char>(bar),因为char被视为F。显然情况并非如此,因为bar不是char,所以F应该是可以推断的。

有没有办法我只能传递一个适用于S的模板参数,仍然会推导出F,并且在一般情况下仍然默认为S

c++ templates parameter-passing template-deduction default-arguments
1个回答
15
投票

只需重新排序模板参数:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.