想象一下定义一个用于在C ++中表示自然数的接口。理想情况如下:
class Nat {
public:
Nat();
virtual Nat next() = 0; // Bad
virtual int toInt() = 0;
};
这将提供定义各种具体实现的能力。问题是,由于Nat
是抽象的,next
的签名无效。切换到可变版本会起作用,但这不是我想要完成的。有什么更好的方法来解决这个问题?
答案 0 :(得分:1)
假设Nat
是不可变的并且next
应该创建一个新对象,我认为这里最好的方法是返回std::unique_ptr<Nat>
,处理next
非常像工厂创建或克隆方法。