Abstract 类 用于不可变接口

Abstract classes for immutable interfaces

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

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

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

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