c ++以此类作为类型继承类模板

时间:2015-08-13 22:08:04

标签: c++ templates inheritance

我希望我的类模板A能够拥有一个仅在B中定义的成员,而B则继承A.

这是理论上可行的代码,但不编译。

template< typename T >
class A
{
public:
    typename T::member mSomething;
};

class B : public A< B >
{
public:
    struct member
    {
        int val;
    };
};

int main( int argc, char** argv )
{
    B* b = new B;
    A<B>* a = b;

    b->mSomething.val = 5;

    if( a->mSomething.val == 5 )
    {
        std::cout << "doing good";
    }

    return 0;
}

此代码无法在MSVCP 2010上编译,错误“'member':不是'B'的成员”

我怎么能绕过这个?

1 个答案:

答案 0 :(得分:3)

CRTP基类不能访问派生类中定义的类型。实例化A<B>时,B是不完整的类型且没有成员,因此您无法访问内容。

您必须在B之外定义类型。