推导出模板的非typename参数的值

时间:2012-04-05 13:24:59

标签: c++ templates

如果使用类型参数

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

然后编译器可以推导出参数T,即使它没有明确提供。有没有办法用以下模板实现相同的效果?

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

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

1 个答案:

答案 0 :(得分:2)

  

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

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

所以你可以这样做:

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

并从数组的大小中推导出n