跳转到内容

更多 C++ 习语/参数化基类

来自 Wikibooks,开放世界中的开放书籍

参数化基类

[编辑 | 编辑源代码]

将可重用模块中的某个方面抽象出来,并在需要时将其组合到给定类型中。

也称为

[编辑 | 编辑源代码]
  • 自下而上的混合
  • 参数化继承

某个方面可以从需求中抽象出来,并作为模板开发(例如,对象序列化)。序列化是一个跨领域关注点,应用程序中的许多类/POD 类型可能具有此关注点。这种关注点可以在易于管理的可重用模块中抽象出来。通过添加一个方面,与原始类型的可替换性不会被破坏,因此另一个动机是与类型参数具有 IS-A(公有继承)或 WAS-A(私有继承)关系。

解决方案和示例代码

[编辑 | 编辑源代码]
template <class T>
class Serializable : public T,   /// Parameterized Base Class Idiom
                     public ISerializable
{
  public:
    Serializable (const T &t = T()) : T(t) {}
    virtual int serialize (char *& buffer, size_t & buf_size) const
    {
        const size_t size = sizeof (T);
        if (size > buf_size)
          throw std::runtime_error("Insufficient memory!");

        memcpy (buffer, static_cast<const T *>(this), size);
        buffer += size;
        buf_size -= size;
        return size;
    }
};

Serializable <T> 可以多态地用作 T 以及 ISerializable。上面的示例仅在 T 是没有指针的用户定义的 POD 类型时才正常工作。

已知用途

[编辑 | 编辑源代码]
[编辑 | 编辑源代码]

参考文献

[编辑 | 编辑源代码]
华夏公益教科书