CppCoreGuidelines C.122 如果接口和实现要彻底分开,请使用抽象类作为接口
07 December 2022
C.122: 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
访问所有接口。