Je pose cette question par curiosité plutôt que par difficulté, car j'apprends toujours de vous, même sur des sujets sans rapport.
Considérons donc la méthode suivante, écrite en C++ et liée avec g++. Cette méthode fonctionne bien car tout est initialisé à la bonne taille.
extern "C"
{
void retrieveObject( int id, char * buffer )
{
Object::Object obj;
extractObject( id, obj );
memcpy( buffer, &obj, sizeof(obj) );
}
}
// Prototype of extractObject
const bool extractObject( const int& id, Object::Object& obj ) const;
Maintenant, je voudrais éviter la déclaration d'un local Object
et l'utilisation de memcpy
.
J'ai essayé de remplacer retrieveObject
avec quelque chose comme :
void retrieveObject( int id, char * buffer )
{
// Also tried dynamic_cast and C-Style cast
extractObject( id, *(reinterpret_cast<Object::Object *>(buffer)) );
}
Il se compile et se lie avec succès, mais se plante immédiatement. Si l'on considère que mon tampon est suffisamment grand pour contenir un Object
Le C++ a-t-il besoin d'appeler le constructeur pour "former" la mémoire ? Existe-t-il un autre moyen de remplacer les variables locales et le memcpy ?
J'espère avoir été suffisamment clair pour que vous puissiez répondre, merci d'avance.