我想问你一个关于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;
}
答案 0 :(得分:3)
因为您直接从依赖于T
的基类继承,所以您需要使用this->
来访问您的数据成员:
std::cout << "Its own value is : " << this->value << std::endl;
// ^^^^^^