CRTP在基类的派生类中引用typedef

时间:2016-03-28 18:19:09

标签: c++ templates crtp

我有以下代码:

template <typename T>
class A
{
    typedef typename T::Type MyType;
};

template <typename T>
class B : public A<B<T>>
{
    typedef T Type;
};

当我尝试实例化B时,我收到以下使用MSVS 2015的错误消息:

'Type': is not a member of 'B<int>'

此代码是有效的C ++还是MSVS正确?

1 个答案:

答案 0 :(得分:3)

问题在于此时

{ 
    "_id" : "00e8da9b", 
    "Count" : NumberInt(2)
}
{ 
    "_id" : "0ab42f88", 
    "Count" : NumberInt(13)
}

template <typename T> class A { typedef typename T::Type MyType; ^^^ }; 需要是一个完整的类型。但在您的情况下,T在此处实例化时:

A<T>

template <typename T> class B : public A<B<T>> ^^^^^^^ 还不是一个完整的类型!所以这不可能不幸。

简单的解决方案就是单独传递B<T>

Type