c++ convertir une chaîne en un pointeur void
- Je utiliser une bibliothèque qui ont une fonction de rappel lorsque l'un des paramètres est de type void *
. (Je suppose que pour laisser à envoyer tout type de valeur.)
J'ai besoin de passer une chaîne de caractères (std::string
ou un char[]
est le même).
Comment puis-je faire cela?
Dans le cas de
std::string
, la fonction s'attendre à un pointeur vers la chaîne de caractères ou un pointeur interne de tableau de char?OriginalL'auteur ghiboz | 2013-01-27
Vous devez vous connecter pour publier un commentaire.
Si vous êtes sûr que l'objet est vivant (et peut être modifié) au cours de la durée de vie de la fonction, vous pouvez faire un cast sur un pointeur de chaîne, en le tournant dans une référence dans le rappel:
De sortie est
Hello, Callback!
OriginalL'auteur Seb Holzapfel
Si vous avez un char-tableau, alors il peut être converti en un pointeur void implicitement. Si vous avez une chaîne C++, vous pouvez prendre l'adresse du premier élément:
Assurez-vous que le
std::string
survit à l'appel de la fonction d'expression..c_str()
et.data()
donnerconst char *
paschar *
(peut-être MSCV seulement)donc, vous auriez besoin d'utiliser
f((void *) s.c_str());
Merci, très bon point. Vous ne devriez pas jeté constness, donc je l'ai changé pour quelque chose qui fonctionne réellement.
OriginalL'auteur Kerrek SB
Si c'est une fonction de rappel qui vous offre, que vous pouvez tout simplement passer l'adresse de la
std::string
objetDe toute façon, comme Kerrek SB a dit, assurez-vous que la durée de vie de l'objet string est au moins aussi longue que l'intervalle de temps de la fonction de rappel est en cours d'utilisation.
OriginalL'auteur StoryTeller