Conversion vector<T> en T* [c++] - C++ - Programmation
Marsh Posté le 12-10-2004 à 21:37:34
serait-il possible, pour commencer, de savoir pourquoi tu veux faire ca?
Marsh Posté le 12-10-2004 à 21:38:53
Je developpe un wrapper C++ pour encapsuler une lib ecrite C. Les fonctions C attendent un T* en argument, alors que je travaille avec des vector<T>.
Marsh Posté le 12-10-2004 à 23:01:12
&v[0] également, c'est imposé dans la spécification de std::vector<T>
Marsh Posté le 12-10-2004 à 23:23:41
Joel F a écrit : j'ai toujours trouvé ca moche &v[0] |
C'est vector::begin qui est crade je dirais. Rien n'impose dans la norme que celui-ci soit un pointeur
Marsh Posté le 12-10-2004 à 23:27:19
Kristoph a écrit : C'est vector::begin qui est crade je dirais. Rien n'impose dans la norme que celui-ci soit un pointeur |
o_O
pardon
vector<float> a.
float* pa = a.begin();
ca a plsu de guele que pa = &a[0];
Marsh Posté le 12-10-2004 à 23:28:35
Joel F a écrit : o_O |
cay pas portable bordel!
Marsh Posté le 12-10-2004 à 23:48:28
hum, de ce que je me souviens, l'implémentation des iterator est dépendantes du système. Ce qui est sur, c'est T == iterator::value_type. Donc faudrait faire T *first = &*begin(); ... faudrait faire une petite recherche la dessus.
les reference et const_reference sont des T et l-value-T
Marsh Posté le 13-10-2004 à 07:57:48
Farpaitement. D'ailleurs, la STL de base de GCC 3.X (valable au moins pour X=0 et X=1) est comme ça. vector::iterator n'est pas un pointeur, mais un objet (c'est l'une des rares implémentations à le faire d'ailleurs, ce qui justifie pas mal de questions dans sa FAQ).
Marsh Posté le 13-10-2004 à 21:44:14
Lam's a écrit : Farpaitement. D'ailleurs, la STL de base de GCC 3.X (valable au moins pour X=0 et X=1) est comme ça. vector::iterator n'est pas un pointeur, mais un objet (c'est l'une des rares implémentations à le faire d'ailleurs, ce qui justifie pas mal de questions dans sa FAQ). |
voila merci, JoelF --> DTC
Marsh Posté le 13-10-2004 à 21:58:53
Donc je remplace
Code :
|
par
Code :
|
Cela reste portable, si je conclue bien.
Marsh Posté le 13-10-2004 à 22:02:30
Ok, merci de votre aide.
Marsh Posté le 13-10-2004 à 22:04:36
par contre, si j'étais toi, je rajouterais un T * const p = machin; sinon tu va vite être tenter d'itérer ton vector directement avec p, tu perdrais alors tout le bénéfice des iterator
Marsh Posté le 13-10-2004 à 22:15:39
c'est plutot vector::front() au passage.
Marsh Posté le 13-10-2004 à 22:16:41
La conversion passe bien mais je me fais couillonné par l'API écrite en C au final. Je suis obligé de const_caster au moment de l'appel de la fonction C.
Marsh Posté le 13-10-2004 à 22:19:47
Code :
|
Marsh Posté le 13-10-2004 à 22:19:52
Code :
|
Marsh Posté le 13-10-2004 à 22:20:23
ben évidemment, si ton machin C est défaillant niveau constness ...
Marsh Posté le 13-10-2004 à 22:21:47
ReplyMarsh Posté le 13-10-2004 à 22:22:07
Distribuer des lib pour un OS récent avec une API en C aussi pourri... je comprends pas.
Marsh Posté le 12-10-2004 à 21:33:48
Bonsoir,
A l'image de string::c_str(), existe t il une methode pour realiser cette conversion. Sinon quelle serait la méthode la plus économique.
Merci.
---------------
Cordialement, Xterm-in'Hate...