2012-04-05 54 views
2

的值如果你定义一个类型参数推导模板的非类型名称参数

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

然后参数T可以通过,即使它没有明确提供的编译器推导出的模板。有以下模板达到相同效果的方法吗?

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

我的意思是,对于模板实参推演规则有当参数是一个值(INT,BOOL等),而不是一个类型?

回答

2

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

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

所以,你可以这样做:

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

,并从数组的大小推断n

+0

这正是我所期待的。你知道这适用的其他例子吗? (或者列出可能情况的一些参考) – Malabarba 2012-04-05 21:28:15