C ++ CRTP和不完整的类定义

时间:2017-12-01 11:07:51

标签: c++ crtp incomplete-type

使用CRTP时是指基本定义中允许的派生类字段吗?

template<typename T>
class Base
{
public:
    constexpr int IntInDerived = T::SomeInt; // <--- Is This Valid
    using TypeInDerived = typename T::SomeType; // <--- Is This Valid
};

class Derived : public Base<Derived>
{
public:
    constexpr int SomeInt = 10;
    using SomeType = float;
};

我不确定,因为即使T :: SomeInt和T :: SomeType是依赖名称,在实例化Base时,Derived也被视为不完整类型。

1 个答案:

答案 0 :(得分:0)

显然这些在放置在类定义块中时无效,就像在问题中一样。但是,访问方法中的T成员是有效的,因为方法将在以后单独实例化。