繁体   English   中英

模板继承和成员访问

[英]template inheritance and member access

我有以下简单的代码:

template <typename T>
struct base
{
  std::vector<T> x;
};

template <typename T>
struct derived : base<T>
{
  void print()
    {
      using base<T>::x;     // error: base<T> is not a namespace
      std::cout << x << std::endl;
    }
};

当我编译代码(使用GCC-4.7.2)时,收到上面注释中看到的错误。

我在这里阅读: http : //gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Name-lookup.html#Name-lookup

using base<T>::x

必须包含在内以引入基类的范围。 任何想法有什么问题吗? 先感谢您!

using声明放在类定义中,而不是在函数主体中:

template <typename T>
struct derived : base<T>
{
    using base<T>::x;     // !!

    void print()
    {
        std::cout << x << std::endl;
    }
};

(当然, 您有责任确保您的std::vector实际上存在operator<<重载,例如,使用漂亮的打印机 。)

如果您明确地说x是成员,则也可以使其工作:

template <typename T>
struct base
{
  std::vector<T> x;
  base() : x(1) {}
};

template <typename T>
struct derived : base<T>
{
  void print()
    {
      std::cout << this->x[0] << std::endl;
    }
};

int main()
{
    derived<int> d;
    d.print();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM