Es wird wahrscheinlich funktionieren, aber ich glaube nicht, dass es garantiert ist. Folgendes ist ein Zitat aus ISO C++ 10/5:
Ein Basisklassenunterobjekt kann ein Layout (3.7) haben, das sich vom Layout eines am meisten abgeleiteten Objekts desselben Typs unterscheidet.
Es ist schwer zu sehen, wie dies in der "realen Welt" tatsächlich der Fall sein könnte.
EDIT:
Unterm Strich ist, dass der Standard die Anzahl der Plätze begrenzt ist, wo eine Basisklasse subobject Layout kann mit dem gleichen Basistyp aus einem konkreten Objekt unterschiedlich sein. Das Ergebnis ist, dass alle Annahmen, die Sie möglicherweise haben, wie POD-Ness usw. nicht unbedingt für das Unterobjekt der Basisklasse gelten.
EDIT:
Ein alternativer Ansatz, und einer, dessen Verhalten definiert ist gut ist ‚foo‘ Mitglied von ‚bar‘ zu machen und einen Umwandlungsoperator zur Verfügung zu stellen, wo es notwendig ist.
class bar {
public:
int my_bar() {
return ret_foo(foo_);
}
//
// This allows a 'bar' to be used where a 'foo' is expected
inline operator foo&() {
return foo_;
}
private:
foo foo_;
};
Ich vermute, du meinst (foo *) dies oder noch besser: static_cast (dies) –
Ich bin neugierig auf die Wirkung eines externen "C" um eine Klasse mit einer Methode ... Dennoch, die Wenn Sie dies tun möchten, können wir Ihnen Informationen oder alternative Lösungen anbieten. – paercebal
Wenn Sie "portable über Compiler" sagen, meinen Sie, den C-Code mit einem Compiler und das C++ mit einem anderen Compiler zu kompilieren? – Roddy