在这种情况下,什么是基类?

时间:2017-09-29 07:53:31

标签: c++ templates

在这种情况下,什么是基类?

由于FieldType::templateRecordPolicy<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> > {};
};

1 个答案:

答案 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>,而后者又具有另一个基类。

相关问题