具有另一个具有默认值的模板参数的模板推导

Template deduction with another template parameter that has a default value

本文关键字:参数 默认值 另一个      更新时间:2023-10-16

下面的代码不会编译,因为当我想指定Param时,AB的类型推导被禁用,我也必须显式指定它们。

#include <iostream>
template<typename A, typename B>
struct L
{
};
template<typename A, typename B, unsigned Param = 0>
void fn(L<A, B> l_) {}
int main()
{ 
L<int, float> l;
fn<3>(l);
}

Coliru

有没有可能在扣除AB的情况下两全其美,但仍然能够提供Param,它在被遗漏的情况下具有默认值?

当然,你只需要把Param参数放在第一位(这样你就可以显式地指定它(:

template<unsigned Param = 0, typename A, typename B>
void fn(L<A, B> l_) {}

请注意,即使AB没有默认参数,这也是有效的,因为它们可以推导出来。