Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1392 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Template un peu fin

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Template un peu fin

n°313581
Joel F
Real men use unique_ptr
Posté le 19-02-2003 à 22:54:56  profilanswer
 

voila, je bosse sur une bibliotheque de calcul vectoriel utilisant l'architecture SIMD d'Altivec sur PPC G4.
Je suis en train d'encapsuler le concept de vecteur parallele dans un classe qui ressemble comme 2 gouttes d'eau a valarray de la STL.
 
J'utilise evidemment des templates pour pas me faire chier :
 

Code :
  1. template <class T> class VecArray
  2. {
  3. ...
  4. // plein de truc.
  5.   private:
  6.   _vector T* mData;
  7. };


 
le truc ce que dans mes methodes, j'utilise les fonctions C AltiVec (vec_add, vec_madd etc ...) aui ne peuvent prendre comme argument que des types du style :
 
_vector signed char
_vector unsigned char
_vector signed short
_vector unsigned short
_vector signed long
_vector unsigned long
_vector float
 
Mon probleme :
 
Comment restreindre a la compialtion l'instantiation du template VecArray ?
 
CAD autoriser :
 
VecArray<float> monTab;
 
mais interdire
 
VecArray<string> truc;
 
qui n'a aucun sens.
 
 
Merci d'avance  [:joel f]  

mood
Publicité
Posté le 19-02-2003 à 22:54:56  profilanswer
 

n°313595
Taz
bisounours-codeur
Posté le 19-02-2003 à 23:04:32  profilanswer
 

ben justement,c'est la un des problèmes des tempaltes C++, l'absence de contrainte ou l'impossibilité d'imposer un contrat.
 
le mieux: ta classe template tu la fait en privée, elle ne concerne que l'implémentaion, et apres dans le .h à inclure, tu propose des template instanciés tout fait
 
genre.
 
vecarray_bits.h
 


template <class T>
class VecArray
{};
 


 
vecarray.h
 
 
 


#include "vecarray_bits.h"
 
typedef VecArray<float> FloatVecArray;
typedef VecArray<double> DoubleVecArray;

 
 
c'est à mon avis la seule solution pour planquer ton template et emepecher une utilisation

n°313691
Joel F
Real men use unique_ptr
Posté le 20-02-2003 à 08:51:15  profilanswer
 

c'est en effet une idée.
Je pense que je vais tester ca.
 
Merci :D

n°313730
Musaran
Cerveaulté
Posté le 20-02-2003 à 09:26:02  profilanswer
 

En s'inspirant de ceci: Why can't I define constraints for my template parameters?

Code :
  1. template <typename T> struct CheckVecArrayAllowed;
  2. template <> struct CheckVecArrayAllowed<signed char   >{};
  3. template <> struct CheckVecArrayAllowed<unsigned char >{};
  4. template <> struct CheckVecArrayAllowed<signed short  >{};
  5. template <> struct CheckVecArrayAllowed<unsigned short>{};
  6. template <> struct CheckVecArrayAllowed<signed long   >{};
  7. template <> struct CheckVecArrayAllowed<unsigned long >{};
  8. template <> struct CheckVecArrayAllowed<float         >{};
Code :
  1. template <class T> class VecArray
  2. {
  3. public:
  4. VecArray(){
  5.  CheckVecArrayAllowed<T>(); //pas de constructeur= type T non géré
  6. }
  7. };
  8. int main(){
  9. VecArray<signed char> (); //ok
  10. VecArray<float      > (); //ok
  11. VecArray<double     > (); //NAN !
  12. }

Il y peut-être moyen de faire mieux.
 
N'oublie pas le type char...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°313738
Joel F
Real men use unique_ptr
Posté le 20-02-2003 à 09:38:08  profilanswer
 

... Ce Bjarne m'etonnera tjrs :D
 
je v digérer tout ca, et venir aux nouvelles.
 
Mercia tous :D

n°313779
Kristoph
Posté le 20-02-2003 à 10:33:46  profilanswer
 

Ca aussi ca peut etre pratique :
 
http://boost.org/libs/static_assert/static_assert.htm

n°313787
Taz
bisounours-codeur
Posté le 20-02-2003 à 10:41:36  profilanswer
 

oui, mais ça depend de ce qu'on veut: interdire purement, ou laisser essayer

n°313837
Joel F
Real men use unique_ptr
Posté le 20-02-2003 à 11:09:57  profilanswer
 

Interdire clairement, quitte à alléger les assertions si  
ces Mrs de chez Apple nous sortent AltiVec II

n°313867
Taz
bisounours-codeur
Posté le 20-02-2003 à 11:25:50  profilanswer
 

ben alors soit utilise une méthode pour que ça passe pas à la compilation, soit utilise une technique de fourbe en planquant ton template


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Template un peu fin

 

Sujets relatifs
Template / Pointeur de fonction[C++] Definir des contraintes pour un template
polymorphisme et template[C++] template et condition
[C/C++] template: j'ai merdé, help siouplaitQu'est ce que des template ???
IntelliJ Idea, comment on change les Class Template ?[PHP] Optimisation pour un template
MRTG template[C++] Liste chainée générique (template) [résolu]
Plus de sujets relatifs à : Template un peu fin


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR