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*/}
};
Bởi vì tôi muốn sử dụng toán tử quá tải,
tham khảo là một lựa chọn tốt hơn so với con trỏ.C++ tham khảo lớp cơ sở khởi với đối tượng khác nhau có nguồn gốc lớp
Những gì tôi có ý định làm là như sau:
if (condition) {
Base& obj = Derived1();
} else {
Base& obj = Derived2();
}
Nhưng obj sẽ bị phá hủy và kết thúc của phạm vi.
Base& obj;
if (condition) {
obj = Derived1();
} else {
obj = Derived2();
}
Sẽ không làm việc, hoặc,
Bởi vì tài liệu tham khảo cần phải được khởi tạo trên tuyên bố.
Nếu tôi cố gắng:
Base& obj = condition ?
Derived1() : Derived2();
Vẫn còn một lỗi, Bởi vì hành ternary mong đợi kiểu mui trần.
Giải pháp tốt nhất để giải quyết vấn đề này là gì?
Sử dụng con trỏ có nghĩa là tôi phải sử dụng obj-> operator(), và mất cú pháp tự nhiên của nhà khai thác quá tải. – gnephiak
xem câu trả lời cập nhật của tôi, bạn không 'phải gọi -> và nó không mất quá tải nhà điều hành – billz
Mặc dù điều này sử dụng con trỏ, vẫn là câu trả lời tốt nhất cho nhu cầu của tôi. – gnephiak