2 votes

Puis-je transformer un tampon char* en un type d'objet ?

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X