据我所知,您不能在 C++ 中继承构造函数。但是在某些情况下,您可能需要看起来像实例化继承类的方式与实例化它们的基类一样:
struct Base {
int i;
int const j;
Base(int i, int j) : i(i), j(j) {}
};
// option 1)
struct Derived1 : Base {
Derived1(int i, int j) : Base(i,j) {}
};
Base* baseFactory() {
return new Derived1(42,47);
}
// option 2)
struct Derived2 : Base {
};
Base* baseFactory() {
Base* b = new Derived2();
b->i = 42;
b->j = 47; // broken!
// alternative could be to implement Base::operator=
return b;
}
请注意,如果不是为它们的基类,则可以默认构造派生类。
我认为,选项 1 是通常所做的,但是您输入的代码没有表达任何新内容。选项 2 破坏了const
正确性(并阻止您将引用用作成员),因为所有内容都必须是可分配的。
有没有一个很好的方法来解决这个问题?
编辑:C++11 很棒,但不幸的是我需要一个 C++03 解决方案。