使用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也被视为不完整类型。
答案 0 :(得分:0)
显然这些在放置在类定义块中时无效,就像在问题中一样。但是,访问方法中的T成员是有效的,因为方法将在以后单独实例化。