首页 > 解决方案 > 仅传递第二个模板参数的方法

问题描述

所以我有一个模板函数,它有一个默认的第二个参数。可以推断出它的第一个论点,例如:

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

这在一般情况下工作正常,我只需调用foo(bar). 但是在我想指定第二个参数的情况下,我不能这样做:foo<char>(bar),因为char被视为F。显然情况并非如此,因为bar不是 a char,所以F应该是可推导出的。

有没有一种方法可以在这里只传递一个模板参数,该参数适用于S,仍然F可以推导出来,并且S在一般情况下仍然默认?

标签: c++templatesparameter-passingtemplate-argument-deductiondefault-arguments

解决方案


只需重新排序模板参数:

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

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


推荐阅读