推导模板的非类型名参数的值

Deducing the value of a template's non-typename argument

本文关键字:参数 类型      更新时间:2023-10-16

如果使用类型参数定义模板

template <class T>
void f(const T& arg){...};

然后,编译器可以推断参数T,即使它没有显式提供。有没有办法使用以下模板达到相同的效果?

template <int n>
void g(){...};

我的意思是,当参数是值(int、bool 等)而不是类型时,是否有模板参数推断规则?

我的意思是,当参数是值(int、bool 等)而不是类型时,是否有模板参数推断规则?

是的,它们与类型完全相同。但是,请注意,所有模板参数推导都取决于参数的已知静态类型(即不是运行时整数变量)(转换运算符除外,其中返回类型计数)。

所以你可以这样做:

template <int n>
void g(int (&array)[n]){...};

并从数组的大小推断出n