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

  FORUM HardWare.fr
  Programmation
  C++

  Problème template template [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème template template [RESOLU]

n°1713263
chicotruss
Posté le 06-04-2008 à 00:48:43  profilanswer
 

Bonjour,
 
j'ai un problème de compilation sous gcc avec le code suivant:
 

Code :
  1. template < uint8_t IDXS, typename S, template <class> class CSS,
  2.            uint8_t IDXD, typename D, template <class> class CSD >
  3. struct quantifier {
  4.    inline static D scale(const S* src) {
  5.       const D minD = CSD<D>::minValue(IDXD);
  6.       const D delD = CSD<D>::maxValue(IDXD) - minD;
  7.       const S delS = CSS<S>::maxValue(IDXS) - CSS<S>::minValue(IDXS);
  8.       return D(minD + src[IDXS] * delD / delS);
  9.    }
  10. };
  11. template < typename T >
  12. struct RGB {
  13.    static inline uint8_t countSamples() { return 3; }
  14.    static inline T minValue(uint8_t sample) { return 0; }
  15.    static inline T maxValue(uint8_t sample) { return 1; }
  16.    template < typename U >
  17.    static inline void fromRGB(T* dest, const U* src) {
  18.       dest[0] = quantifier<0,U,RGB,0,T,RGB>::scale(src);
  19.       dest[1] = quantifier<1,U,RGB,1,T,RGB>::scale(src);
  20.       dest[2] = quantifier<2,U,RGB,2,T,RGB>::scale(src);
  21.    }
  22.    template < typename U >
  23.    static inline void toRGB(T* dest, const U* src) {
  24.       fromRGB<U>(dest, src);
  25.    }
  26. };


 
Pour les lignes 20 à 22, le message est:
 

Code :
  1. error: type/value mismatch at argument 3 in template parameter list for `template<unsigned char IDXS, class S, template<class> class CSS, unsigned char IDXD, class D, template<class> class CSD> struct quantifier'
  2. error:   expected a class template, got `RGB<T>'
  3. error: type/value mismatch at argument 6 in template parameter list for `template<unsigned char IDXS, class S, template<class> class CSS, unsigned char IDXD, class D, template<class> class CSD> struct quantifier'
  4. error:   expected a class template, got `RGB<T>'
  5. error: `scale' is not a member of `<declaration error>'


 
D'après le message, je suppose que le fait d'être à l'interieur de la classe RGB est interpreté comme RGB<T> et donc le paramètre passé a scale n'est plus un template.
 
Quelle est la syntaxe a employer pour passer RGB et pas RGB<T> ?


Message édité par chicotruss le 07-04-2008 à 19:43:21
mood
Publicité
Posté le 06-04-2008 à 00:48:43  profilanswer
 

n°1713469
jesus_chri​st
votre nouveau dieu
Posté le 06-04-2008 à 20:25:27  profilanswer
 

sort le code de la classe, tout en le laissant inline.
 

Code :
  1. template < uint8_t IDXS, typename S, template <class> class CSS,
  2.            uint8_t IDXD, typename D, template <class> class CSD >
  3. struct quantifier {
  4.    inline static D scale(const S* src) {
  5.       const D minD = CSD<D>::minValue(IDXD);
  6.       const D delD = CSD<D>::maxValue(IDXD) - minD;
  7.       const S delS = CSS<S>::maxValue(IDXS) - CSS<S>::minValue(IDXS);
  8.       return D(minD + src[IDXS] * delD / delS);
  9.    }
  10. };
  11. template < typename T >
  12. struct RGB {
  13.    static inline uint8_t countSamples() { return 3; }
  14.    static inline T minValue(uint8_t sample) { return 0; }
  15.    static inline T maxValue(uint8_t sample) { return 1; }
  16.    template < typename U >
  17.    static void fromRGB(T* dest, const U* src);
  18.    template < typename U >
  19.    static inline void toRGB(T* dest, const U* src) {
  20.       fromRGB<U>(dest, src);
  21.    }
  22. };
  23. template< typename T >
  24. template< typename U >
  25. inline void RGB< T >::fromRGB(T* dest, const U* src)
  26. {
  27.       dest[0] = quantifier<0,U,RGB,0,T,RGB>::scale(src);
  28.       dest[1] = quantifier<1,U,RGB,1,T,RGB>::scale(src);
  29.       dest[2] = quantifier<2,U,RGB,2,T,RGB>::scale(src);
  30. }


 
edit :
finalement je ne suis pas sûr que ce soit suffisant pour ton problème :D
et si tu mettais template devant RGB ?


Message édité par jesus_christ le 06-04-2008 à 20:29:50
n°1713609
ElDesdicha​do
Posté le 07-04-2008 à 10:47:46  profilanswer
 

Sûr que tu as besoin de :

Code :
  1. template < uint8_t IDXS, typename S, template <class> class CSS,
  2.             uint8_t IDXD, typename D, template <class> class CSD >


Genre tu pourrais définir:

Code :
  1. template < uint8_t IDXS, typename S, class CSS,
  2.             uint8_t IDXD, typename D, class CSD >


et utiliser dans ta struct RGB:

Code :
  1. dest[0] = quantifier<0,U,RGB<U>,0,T,RGB<T> >::scale(src);


ou si tu es dans la struct:

Code :
  1. dest[0] = quantifier<0,U,RGB<U>,0,T,RGB>::scale(src);

n°1713996
chicotruss
Posté le 07-04-2008 à 19:42:46  profilanswer
 

Merci pour vos idées.
 
J'ai essayé de sortir le code de ma classe et avec template (j'ai éssayé aussi typename et template typename) mais ça n'a pas fonctionné.
Pour la solution d'ElDesdichado, j'y avais pensé mais je prefèrait l'eviter pour garantir que CSS soit bien CSS<S>.
 
Au final, je viens de résoudre mon problème en qualifiant RGB depuis la portée globale:
 

Code :
  1. dest[0] = quantifier<0,U,::RGB,0,T,::RGB>::scale(src);

n°1714000
Joel F
Real men use unique_ptr
Posté le 07-04-2008 à 20:00:44  profilanswer
 

chicotruss a écrit :

Merci pour vos idées.
J'ai essayé de sortir le code de ma classe et avec template (j'ai éssayé aussi typename et template typename) mais ça n'a pas fonctionné.


 
tu aurais pu t'en sortir avec un petit coup de MPL_HAS_TRAITS_DEF


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

  Problème template template [RESOLU]

 

Sujets relatifs
probleme de driver jdbcProblème d'edition de lien
[résolu]Incrémentation variable à chaque rechargement de la pageProblème compilation Libcaca (pour VLC)
sql access probleme de requeteProblème compilation Libcaca (pour VLC)
[jdbc] probleme d'ajout du driverProblème css : height: 100%; ne prend pas toute la hauteur
[RESOLU] Sauvegarde automatique SQL chez Free[resolu] [perl] problème "lib text::template" suite migration server
Plus de sujets relatifs à : Problème template template [RESOLU]


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