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*/}
};
Bo chcę używać przeciążanie operatorów,
referencyjny jest lepszym rozwiązaniem niż wskaźnik.C++ odniesienia klasa bazowa zainicjować z innej klasy pochodzi obiektu
Co mam zamiar zrobić to tak:
if (condition) {
Base& obj = Derived1();
} else {
Base& obj = Derived2();
}
Ale obj zostać zniszczone i koniec zakresu.
Base& obj;
if (condition) {
obj = Derived1();
} else {
obj = Derived2();
}
nie będzie działać albo,
ponieważ potrzebują odniesienie być inicjowane na deklaracji.
Gdy próbuję:
Base& obj = condition ?
Derived1() : Derived2();
Mimo błędu Ponieważ operator trójargumentowy spodziewać typu cabrio.
Jakie jest najlepsze rozwiązanie tego problemu?
Korzystanie wskaźnik oznacza, muszę używać obj-> operator(), i tracą naturalną składnię przeciążenia operatora. – gnephiak
zobacz moją zaktualizowaną odpowiedź, nie musisz zadzwonić -> i nie traci ona przeciążenia operatora – billz
Mimo że używa wskaźnika, wciąż jest najlepszą odpowiedzią na moje potrzeby. – gnephiak