不可变接口的抽象类

Abstract classes for immutable interfaces

本文关键字:抽象类 接口 不可变      更新时间:2023-10-16

想象一下,在C++中定义一个表示自然数的接口。理想情况下类似于:

class Nat {
    public:
        Nat();
        virtual Nat next() = 0; // Bad
        virtual int toInt() = 0;
};

这将提供定义各种具体实现的能力。问题是,由于Nat是抽象的,因此next的签名是无效的。切换到可变版本是可行的,但这不是我想要实现的。解决这个问题的更好方法是什么?

假设Nat是不可变的,并且next应该创建一个新对象,我认为这里最好的方法是返回一个std::unique_ptr<Nat>,将next视为工厂创建或克隆方法。