Tengo algunos problemas con el uso del operador condicional para obtener una referencia a un objeto. Tengo la una configuración similar a esto:Problema del operador condicional
class D
{
virtual void bla() = 0;
};
class D1 : public D
{
void bla() {};
};
class D2 : public D
{
void bla() {};
};
class C
{
public:
C()
{
this->d1 = new D1();
this->d2 = new D2();
}
D1& getD1() {return *d1;};
D2& getD2() {return *d2;}
private:
D1 *d1;
D2 *d2;
};
int main()
{
C c;
D& d = (rand() %2 == 0 ? c.getD1() : c.getD2());
return 0;
}
Al compilar, esto me da el siguiente error:
WOpenTest.cpp: In function 'int
main()': WOpenTest.cpp:91: error: no
match for conditional 'operator?:' in
'((((unsigned int)rand()) & 1u) == 0u)
? c.C::getD1() : c.C::getD2()'
entiendo que esto es ilegal de acuerdo con el estándar de C++ (as seen in this blog post), pero don No sé cómo obtener mi referencia al D
sin usar el operador condicional.
¿Alguna idea?
Sí, esto funciona perfectamente. – laura
Solo necesita uno de los moldes aquí también, lo que hace que la expresión sea un poco menos detallada. –
@Richard, ah buena nota. Para mí, parece más fácil si aplico el elenco a ambos operandos, pero, por supuesto, es correcto, un lanzamiento es suficiente para que el compilador vea que el otro se puede convertir a 'D &' implícitamente. –