在这种情况下,什么是基类?
由于FieldType::template
和RecordPolicy<N>
template<
class N,
class FieldType
>
class FieldDefinition:
public FieldType::template RecordPolicy<N>
{
public:
typedef typename FieldType::GetSetPolicy::Type Type;
typedef typename FieldType::GetSetPolicy::MemoryType MemoryType;
typedef FieldType FieldClass;
};
用法:
template<class ObjectClass_, class Schema_>
class Object:
public virtual ObjectBase,
public FieldDefinition<ObjectClass_, PointerField<ObjectClass_> >
{
//...
}
其他:
template<class T> class PointerField;
template<class T>
class PointerField
{
public:
//...
template<class N>
class RecordPolicy : public SerializedField<N, PointerField<T> > {};
};
答案 0 :(得分:3)
Object<Foo, Bar>
的完整层次结构为:
Object<Foo, Bar>
virtual ObjectBase
FieldDefinition<Foo, PointerField<Foo>>
PointerField<Foo>::RecordPolicy<Foo>
SerializedField<Foo, PointerField<Foo>>
特别要注意FieldType::template RecordPolicy<N>
基本子句。这意味着FieldDefinition
期望提供的任何类FieldType
(在您的情况下,PointerField<Foo>
)都有一个名为RecordPolicy
的嵌套模板单一类型模板参数,其N
(在您的情况下,再次为Foo
)将被替换。该类派生自此实例化的结果,在您的情况下是嵌套类PointerField<Foo>::RecordPolicy<Foo>
,而后者又具有另一个基类。