我有一个 Literal 类,它实际上只是 (const int) 的包装器。我想要第二个类 PositiveLiteral,它继承自 Literal,但有一个构造函数断言其值为正数。
class Literal {
public:
Literal(int x):x(x){}
virtual ~Literal(){}
// Other methods
private:
const int x;
}
class PositiveLiteral : public Literal {
public:
PositiveLiteral(int x):Literal(x) {
assert(x > 0)
}
}
通过这种方式,期望正字面量的函数可以简单地将 PositiveLiteral 作为参数。然后我不需要在我的代码中放置明确的断言,此外,如果这些断言会失败,我可以立即看到原因。
除了在这种情况下,我不希望以其他方式从 Literal 继承。然而,因为有继承,我必须给 Literal 一个虚拟析构函数以避免未定义的行为,这看起来很愚蠢,因为 PositiveLiteral 没有与其相关的额外信息,而 Literal 没有。这只是一种无需明确声明即可维护断言的方法。
在应该是一个简单的包装类中,不需要虚拟方法来完成相同任务的另一种方法是什么?