2009-09-14 6 views
0

J'essaie d'ouvrir le (s) fichier (s) de données brutes contenant des nombres en utilisant VC++. Les chiffres peuvent être 8/16/24 bits. J'ai une connaissance préalable de cela pour un fichier donné. Puis-je utiliser des modèles C++ pour créer des variables de tableau pour stocker des nombres lus à partir de fichiers en fonction de leur profondeur de bits? Quelque chose sur les lignes de ce code pseudo:Modèle Array dans VC++ 2008

if(BitDepth==8) 
{ 
    CTemplate<unsigned byte> data; // data type should be unsigned byte 
    Read8Bit(data); 
    //.. various ops to read 8 bit data 
} 

if(BitDepth==16) 
{ 
    CTemplate<unsigned short> data; // data type should be unsigned short 
    Read16Bit(data); 
    //.. various ops to read 16 bit data 
} 

if(BitDepth==24) 
{ 
    CTemplate<unsigned int> data; // data type should be unsigned int 
    Read24Bit(data); 
    //.. various ops to read 24 bit data 
} 

//Later use 'data' out of scope of if() conditionals 

Bien sûr, la variable de modèle « données » doit être utilisé en dehors du champ d'application des cas() conditionals plus tard. J'ai donc besoin de déclarer 'data' comme global (disons, en-tête). Am perdre la piste ici ...

Répondre

1

À moins que la profondeur de bit est une constante de compilation, vous avez deux choix:

1) utiliser des objets de mise en œuvre d'exécution variable (les implémentations peuvent être générés en utilisant des modèles plutôt que l'exécution polymorphisme, mais pour les utiliser vous devez type erase à une interface virtuelle ou passer sur la profondeur de bit d'exécution, afin de choisir parmi eux). 2) faire en sorte que toutes les fonctions appelantes prennent la profondeur en tant que paramètre de modèle, jusqu'à un certain niveau où vous faites la variable d'exécution ci-dessus -> mappage de modèle de profondeur de bit particulier (au moins en main)

Oui, vous pouvez avoir des arguments de modèle entier (constant) et une spécialisation partielle.

+0

Merci beaucoup pour la réponse! Ce que je voudrais avoir est une seule variable Template (un tableau) qui peut être faite 8/16/24 bits dans le runtime. Des suggestions à ce sujet? – user173438

+0

En fait, je suis sûr que c'est un problème standard. Juste que je ne trouve aucune référence à une solution. – user173438

+0

Oui, ce serait bien pour votre variable de nom de fichier de modèle. Il peut être plus simple d'avoir 3 modèles nommés avec un membre const (de manière équivalente, vous pouvez avoir le nombre comme argument et partiellement spécialiser). –

0

Je voudrais simplement déclarer des données comme BYTE *. Ensuite, fournissez une classe wrapper qui permettra de récupérer les éléments par index en fonction de la profondeur de bits. Avoir une telle classe, vous serez en mesure de changer la profondeur de bit en cours d'exécution ...

Peut-être qu'il suffit de fournir une fonction de modèle "at", qui accepte index et retourne un élément du type spécifié dans le tableau BYTE. Une programmation de bas niveau sera impliquée, mais C++ est vraiment bon pour ça!