2017-07-29 125 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