Bar bar = static_cast<Bar>(foo);
Ta obsada nie powiedzie się. Foo
i Bar
są niekompatybilne typów, o ile conajmniej jeden z następujących warunków:
Foo
pochodzi z Bar
, albo
Bar
konstruktor które ma Foo
, Or
Foo
jest zdefiniowana przez użytkownika konwersja do Bar
.
Najważniejsze pytanie nie dotyczy tego, czy uda się skutecznie, czy nie. Większe i aktualne pytanie powinno brzmieć: co chcesz wydostać z takiej obsady? Dlaczego chcesz zrobić coś takiego? Co ma robić? Mam na myśli, w jaki sposób zainicjować obiekt Bar
z obiektu Foo
?
Rozsądny sposób konwersji jednego typu do drugiego jest jeden z następujących sposobów:
Albo określić Foo
jak:
class Foo : public Bar
{
//...
};
lub zdefiniować Bar
jak:
class Bar
{
public:
Bar(const Foo &foo); //define this constructor in Bar!
};
Albo zapewnić funkcja konwersji w Foo
jako:
class Foo
{
public:
operator Bar(); //provide a conversion function Foo to Bar!
};
Tak, może działać, ale musisz również wiedzieć, jak go użyć - tutaj jest początek tego, co każda obsada robi w C++: http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-and-reinterpret-cast-be-used – birryree