07 December 2022

C++ 核心指南目录

“Use abstract classes as interfaces when complete separation of interface and implementation is needed”

理由

表达一种应用二进制接口。

例子

struct Device {
    virtual ~Device() = default;
    virtual void write(span<const char> outbuf) = 0;
    virtual void read(span<char> inbuf) = 0;
};

class D1 : public Device {
    // ... data ...

    void write(span<const char> outbuf) override;
    void read(span<char> inbuf) override;
};

class D2 : public Device {
    // ... different data ...

    void write(span<const char> outbuf) override;
    void read(span<char> inbuf) override;
};

用户可以通过 Device 的接口无差别的使用 D1 或 D2。进一步,如果我们更新了 D1 和 D2,变得二进制不兼容,我们依然可以确保使用 Device 访问所有接口。