[Résolu]Passage d'un template non défini entièrement à une fonction

Passage d'un template non défini entièrement à une fonction [Résolu] - C++ - Programmation

Marsh Posté le 13-10-2008 à 11:08:18    

Bonjour,
 
Désolé pour le titre peu évocateur mais je n'ai pas trouvé mieux. cela fait longtemps que je n'ai plus fait de C++ et mon langage n'est peut être pas très approprié.
 
Je veux utiliser la classe générique array de Boost. Pour instancier cette classe, il faut deux paramètres : le type d'objet contenu dans le tableau et le nombre d'éléments.
 
Une initialisation ressemble donc à cela :
 

Code :
  1. array<int,10> a = { { 1, 2, 3, 4, 5 } };


 
J'aimerais utiliser un objet array en paramètre d'une de mes fonctions. Le soucis est que le nombre d'éléments peut être variable. Je ne peux donc pas le préciser dans la signature de ma fonction.
 
Plus concrètement, ma fonction doit recevoir un tableau d'octet dont la taille est variable.
 
Voici la déclaration que je tente d'écrire :
 

Code :
  1. virtual int writeP12(const array<char,???> &p12) = 0;


 
Comment puis-je préciser que je désire un tableau de char mais sans taille déterminée ?
 
Merci d'avance pour vos réponses.


Message édité par mifinoufou le 13-10-2008 à 13:49:19
Reply

Marsh Posté le 13-10-2008 à 11:08:18   

Reply

Marsh Posté le 13-10-2008 à 11:31:12    

Hello,  
 
   Pourquoi est ce que tu veux pas utiliser un std::vector ? Car ça règlerait ton problème...
 
   Les boost::array se sont des tableaux statiques, donc tu va toujours être obligé de spécifier sa taille. A moins de passer par des templates qui te permettra de repousser la définition de taille de tableau, mais dans ce cas la, ça marchera jamais avec ton héritage dynamique que tu veux mettre en place...
 
Donc conclusion : std::vector


Message édité par Amonchakai le 13-10-2008 à 11:32:20
Reply

Marsh Posté le 13-10-2008 à 12:12:48    

En fait, ce que je veux stocker c'est un fichier et j'ai besoin, lors d'appel à des couches basses, de récupérer un char *.
 
array de Boost me permettait d'encapsuler facilement ce fichier et de récupérer ensuite facilement mon char * lorsque j'en avais besoin.
 
Mais bon, la classe array est un peu lourde par rapport à l'utilisation que je veux en faire. Une simple classe (voire une structure) avec un membre char * et un autre la taille me suffit...
 
Merci pour ta réponse qui m'a fait réfléchir un peu ;-)

Reply

Marsh Posté le 13-10-2008 à 12:32:52    

hello,
 
    pour accéder au pointeur du peut le faire simplement avec std::vector :  
 

Code :
  1. std::vector<char> vect;
  2.     .....
  3.     char *ptr = &vect[0]

Reply

Marsh Posté le 13-10-2008 à 13:48:52    

Mais les "vector" ne peuvent pas se construire à partir d'un char * je crois.
 
Vous allez peut me poser la question suivante : "Pourquoi je veux stocker un char * dans un objet pour ensuite récupérer un char *" ?
 
En fait, je dois attaquer des couches basses à partir de Java en utilisant JNI pour faire appel à du code natif. Au niveau Java, j'utilise des byte[] pour stocker mes fichiers. Ensuite je les passe au C++ en passant grâce à JNI. Cependant, le byte[] Java devient une structure assez dépendante de Java donc je veux récupérer les données utiles dedans et les encapsuler dans un type C++ pour ensuite les passer à d'autres fonctions.
 
Je pense que je vais opter pour la solution dans laquelle je crée mon propre objet ou ma structure.
 
Merci pour vos réponses.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed