使用CRTP访问受保护的基类成员

时间:2014-08-03 00:26:02

标签: c++ protected derived-class crtp

我想问你一个关于CRTP的问题。 假设您有一个基类和派生类,如下所示。 有没有办法提取会员"价值"来自派生类的一个成员函数中的基类(例如" foo")?

编译器告诉我:    错误:'value'未在此范围内声明

#include <iostream>

template <class T, class Implementation>
class FooBase
{
protected:
   void fooBase(void) {};
   int value;
};

template <class T>
class Foo : public FooBase <T, Foo<T>>
{
  friend FooBase <T, Foo<T>>;

  public:
  void foo()
  {
    std::cout << "Its own value is : " << value << std::endl;
  }
};

int main ()

{
  Foo <int> foo;
  foo.foo();

  return 0;
}

1 个答案:

答案 0 :(得分:3)

因为您直接从依赖于T的基类继承,所以您需要使用this->来访问您的数据成员:

std::cout << "Its own value is : " << this->value << std::endl;
//                                    ^^^^^^