2017-01-25 32 views
0

有一個模板函數˚F需要它的模板參數類型牛逼有一個名爲一個內部類。模板功能需要內部類的存在在非模板類

Inside f該類別T ::內部將被實例化。

先試試。

// 
// "error: need 'typename' before 'T:: Inner' because 'T' is a dependent scope" 
// 
template <typename T> 
void f(void) 
{   
    T::Inner i; 
} 

我得到的,所以來這裏的第二次嘗試,在這裏我不明白什麼是錯的:

/// "error: expected ';' before 'i' 
template<typename T> 
void f (void) 
{       
    typename T::Inner I; 
    I i; 
} 

這是爲什麼?

以我的理解: 內部被聲明爲類型。 模板尚未實例化。 是否內部存在或不首先變得相關 實例化 - 不定義。我哪裏錯了?

回答

2

我想你想要做的

typename T::Inner i; 

typedef typename T::Inner I; 
I i; 

,而你的問題實際上已經宣佈I是一個變量,然後之後你要使用就好像它是一種類型。

+0

作品!非常感謝你。 – elrat

+0

我會使用'使用I = typename T :: Inner;'來代替。順便說一下,在'using'語句的RHS中不應該要求IMO typename,在這裏很明顯,你可以擁有的唯一東西就是一個類型(或者,如果「decltype」的一部分,編譯器也很清楚什麼是RHS)。 – vsoftco

+1

@vsoftco寫一篇論文併發送到[email protected] – Brian