2

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

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

那么T即使没有明确提供参数,编译器也可以推导出参数。有没有办法用下面的模板达到同样的效果?

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

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

4

1 回答 1

2

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

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

所以你可以这样做:

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

并从数组的大小推断n

于 2012-04-05T13:48:10.513 回答