Bar bar = static_cast<Bar>(foo);
Este molde fallará. Foo
y Bar
son tipos incompatibles, a menos que al menos uno de lo siguiente es cierto:
Foo
se deriva de Bar
, O
Bar
tiene un constructor que toma Foo
, O
Foo
tiene una definida por el usuario conversión a Bar
.
La pregunta más importante aquí no es si se lanzará correctamente o no. La pregunta más grande y real debería ser: ¿qué quieres obtener de ese elenco? ¿Por qué querrías hacer tal cosa en primer lugar? ¿Qué se supone que haga? Quiero decir, ¿cómo se inicializaría el objeto Bar
desde el objeto Foo
?
La forma más sensata para convertir un tipo a otro es una de las siguientes maneras:
De cualquier definir Foo
como:
class Foo : public Bar
{
//...
};
o definir Bar
como:
class Bar
{
public:
Bar(const Foo &foo); //define this constructor in Bar!
};
O proporcionar una función de conversión en Foo
como:
class Foo
{
public:
operator Bar(); //provide a conversion function Foo to Bar!
};
Sí, puede funcionar, pero también debe saber cómo usarlo - Aquí hay un comienzo sobre lo que hace cada elenco en C++: http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-and-reinterpret-cast-be-used – birryree