2017-07-29 130 views
1

我已經有了一個模板類:如何定義模板類的模板

template <class T> 
class A 
{ 
... 
protected: 
    T m_value; 
} 

,我想TE讓使用這個類爲載體的模板:

template <class T> 
class B:public A<std::vector<T>> //no need of space between >> (c++11) 
{ 
void testSize() 
{ 
    if(m_value.size() > ...) 
    { 
     ... 
    } 
} 
} 

編譯器抱怨about:error:'m_value'在這個範圍內沒有聲明

有沒有一種方法可以做到這一點或讓我爲每個std :: vector類型直接使用A類重新編碼這個函數?

感謝,

編輯:

我tryed這一點:

template <class T> 
class B:public A<std::vector<T>> //no need of space between >> (c++11) 
{ 
void testSize() 
{ 
    if(m_value.size() > ...) 
    { 
     ... 
    } 
} 

std::vector<T> m_value; 
} 

編譯器不抱怨了,但確實堪稱一流的m_value函數的參考類的m_value B'

回答

3

在您的第一個示例中,m_value是從屬名稱。
只是這樣做正確的B內引用它:

this->m_value.size() 

也就是說,把你的if聲明:

if(this->m_value.size() > ...) 

在編輯部分中的代碼是錯誤的,而不是。類B和類A將分別指自己的m_value副本。

+0

非常感謝!很簡單,我很慚愧! – user3541297