2012-04-05 81 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