Après avoir parcouru le web et déconner de moi-même, je ne peux pas sembler convertir la cible de Void * (qui est une chaîne) à une ficelle STD :: String. J'ai essayé d'utiliser sprintf(buffer, "%p", *((int *)point));
comme recommandé par cette page Pour accéder à une chaîne C, mais en vain. Et malheureusement, oui, je dois utiliser un vide *, car c'est ce que SDL utilise dans leur struct USEREvent.
Le code que j'utilise pour combler l'userespenser, pour les personnes intéressées, est la suivante:
std::string filename = "ResumeButton.png";
SDL_Event button_press;
button_press.type = BUTTON_PRESS;
button_press.user.data1 = &filename;
SDL_PushEvent(&button_press);
Des idées?
EDIT: Merci pour toutes les réponses, j'ai juste besoin de lancer le vide * à une STD :: String *. Que je suis bête. Merci beaucoup les gars!
Il vous suffit de l'allouer de manière dynamique (car il doit probablement survivre à la portée dans laquelle vous l'utilisez), puis la jette en arrière:
// Cast a dynamically allocated string to 'void*'.
void *vp = static_cast<void*>(new std::string("it's easy to break stuff like this!"));
// Then, in the function that's using the UserEvent:
// Cast it back to a string pointer.
std::string *sp = static_cast<std::string*>(vp);
// You could use 'sp' directly, or this, which does a copy.
std::string s = *sp;
// Don't forget to destroy the memory that you've allocated.
delete sp;
Basé sur votre commentaire "Ce que je voulais dire était de convertir ce que le vide * pointe vers (qui est une chaîne) dans une chaîne."
En supposant que vous avez ceci:
std::string str = ...;
void *ptr = &str;
Vous pouvez simplement revenir à la chaîne:
std::string *pstr = static_cast<std::string *>(ptr);
Notez que c'est sur vous de vérifier que ptr
fait en réalité un std::string
. Si vous vous trompez et que cela indique quelque chose d'autre, cela entraînera un comportement indéfini.
Si le vide est un const Char *, vous pouvez simplement appeler le constructeur STD :: String Country avec IT.e.
const char* cakes = something;
std::string lols = std::string(cakes);