如何定义模板类的模板

时间:2017-07-29 00:12:37

标签: c++ templates subclass

我'我有一个模板类:

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

我想使用此类为矢量制作模板:

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

编译器抱怨:错误:&#39; m_value&#39;未在此范围内声明

有没有办法可以做到这一点,还是让我直接使用A类为每个std :: vector类型重新编码这个函数?

谢谢,

编辑:

我试过这个:

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;
}

编译器不再抱怨了,但是在A类函数中调用的m_value是否引用了B类的m_value?

1 个答案:

答案 0 :(得分:3)

在您的第一个示例中,m_value是一个从属名称 只需执行此操作即可在B

中正确引用它
this->m_value.size()

也就是说,将您的if语句转为:

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

编辑部分中的代码是错误的。课程B和课程A将分别引用自己的m_value副本。