不可变接口的抽象类

时间:2015-03-24 14:41:34

标签: c++ interface abstract-class virtual immutability

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

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

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

1 个答案:

答案 0 :(得分:1)

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