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
非常像工厂创建或克隆方法。
想象一下,在 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
非常像工厂创建或克隆方法。