2013-05-17 116 views
10

如果我有一個模板類:在C++模板類中,我可以使用相同的名稱來鍵入模板參數嗎?

template<typename Layout> 
class LayoutHandler : Handler { 
}; 

,我想參數佈局暴露給類的用戶。 然後:

template<typename Layout> 
class LayoutHandler : Handler { 
public: 
    typedef Layout Layout; // using the same name 
}; 

VS2012可以編譯這段代碼,並給出了預期的結果。 (我使用std :: is_same來檢查它。) 這是允許在標準C++ 03或C++ 11中嗎?

+3

我猜它是允許的,但不鼓勵,雖然(只是感覺並不好)。我更喜歡s.th.像'typedef Layout LayoutType';只是爲了便於閱讀。 –

+0

個人而言,我更喜歡只用一個名字來完成一件事。在構造函數中,我還寫了類似T :: T(int a)的東西:a(a){} – jingyu9575

+0

「typedef」具有相同名稱的目的是什麼?我不太明白。 –

回答

4

不允許在C++ 11。

A typedef是一個聲明。 (請參閱第7.1.3節)

A template參數不能在其範圍內重新聲明(包括嵌套範圍)。 (見第14.6.1.6)

C++11 draft standard n3242

1

不,直到C + 11你不能使用它,它會給你一個錯誤。

宣言「的typedef佈局LayoutHandler ::佈局」 錯誤:陰影模板PARM「類佈局」

+1

標準C++ 11是否允許這樣做? – jingyu9575

+0

「直到C++ 11你不能使用它」我不認爲它適用於C++ 11(至少對我而言)。 – edmz

相關問題