class Base
{
public:
void operator()() { func(); }
private:
virtual void func() {}
};
class Derived1 : public Base
{
private:
void func() override {/*do something*/}
};
class Derived2 : public Base
{
private:
void func() override {/*do something else*/}
};
因为我想使用运算符重载,所以
引用是比指针更好的选择。
我打算做的是:
if (condition) {
Base& obj = Derived1();
} else {
Base& obj = Derived2();
}
但是 obj 将被销毁并结束范围。
Base& obj;
if (condition) {
obj = Derived1();
} else {
obj = Derived2();
}
也不起作用,
因为引用需要在声明时初始化。
如果我尝试:
Base& obj = condition ?
Derived1() : Derived2();
仍然是一个错误,因为三元运算符期望可转换类型。
处理这个问题的最佳解决方案是什么?