我有以下类层次结构:
class Base { // This class cannot be modified
public:
Base(int a, int b, int c) {
if ( a == 100 && b == 200 && c < 100 ) // whatever condition
throw "Error!";
}
};
class Derived : public Base { // this class can be modified
public:
Derived(int a, int b, int c) : Base(a, b, c) {}
};
类Derived在代码中很多地方都用到了,所以不能用某种工厂函数代替。
现在的问题是,是否有一些构造可以让我在调用 Base 构造函数之前修复 a、b、c 值?
我知道我可以使用以下功能:
Derived(int a, int b, int c) : Base(FixA(a), FixB(b), FixC(c)) {}
int FixA(int a) { /*fix a value*/ return a; }
int FixB(int b) { /*fix b value*/ return b; }
int FixC(int c) { /*fix c value*/ return c; }
但它不允许我设置正确的值,以防 abc 值依赖于上面的基类 c-tor 示例。
我正在考虑将其扩展到:
Derived(int a, int b, int c) : Base(FixA(a,b,c), FixB(a,b,c), FixC(a,b,c)) {}
int FixA(int a, int& b, int& c) { /*fix a b c values*/ return a; }
int FixB(int& a, int b, int& c) { /*fix a b c values*/ return b; }
int FixC(int& a, int& b, int c) { /*fix a b c values*/ return c; }
我想还应该有某种标志表明修复已经完成。我不确定这是否真的是正确的 C++。
我知道最好的解决方案是实际捕获异常。