如果使用类型参数
定义模板template <class T>
void f(const T& arg){...};
然后编译器可以推导出参数T
,即使它没有明确提供。有没有办法用以下模板实现相同的效果?
template <int n>
void g(){...};
我的意思是,当参数是值(int,bool等)而不是类型时,是否存在模板参数推导的规则?
答案 0 :(得分:2)
我的意思是,当参数是值(int,bool等)而不是类型时,是否存在模板参数推导的规则?
是的,它们与类型完全相同。但是,请注意所有模板参数推导取决于参数的已知静态类型(即非运算符整数变量)(转换运算符除外,返回类型的计数除外)。
所以你可以这样做:
template <int n>
void g(int (&array)[n]){...};
并从数组的大小中推导出n
。