[RESOLU] Evitez enumeral mismatch ?

Evitez enumeral mismatch ? [RESOLU] - C++ - Programmation

Marsh Posté le 31-07-2003 à 14:46:11    

Bon, j'ai une hierarchie de classe template qui contiennent toutes une enumeration appelé vec_size qui contient la taille de la donnée (na je ferais pas autrement).
 
A un moment j'ai cette situation :
 

Code :
  1. // class binary_node
  2. // Expession Templates placeholder for binary node in AST representation
  3. template<class OP, class LHS, class RHS> class binary_node
  4. {
  5.     public:
  6.     typedef typename LHS::elt_t elt_t;
  7.     typedef LHS     lhs_t;       
  8.     typedef RHS     rhs_t; 
  9.    
  10.     enum {vec_size =( LHS::vec_size==0 ? (LHS::vec_size) : (RHS::vec_size) )};
  11.     binary_node( const lhs_t& lhs, const rhs_t& rhs ) : mLHS(lhs),mRHS(rhs) {}
  12.                
  13.     lhs_t&  getLHS() const    { return mLHS; }
  14.     rhs_t&  getRHS() const    { return mRHS; }
  15.     elt_t operator[]( size_t i ) { return OP::apply(mLHS[i],mRHS[i]); }       
  16.     private:
  17.     lhs_t mLHS;
  18.     rhs_t mRHS;
  19. };

 
 
si je compile je me prends le warning suivant :
 

Code :
  1. warning: enumeral mismatch in conditional expression:

 
 
La doc de GCC me dit d'utilisez -fcond-mismatch mais cette option est désactivée  :/
le seul moyen que j'ai est de caster comme un porc mes enums en int
 

Code :
  1. enum {vec_size =( LHS::vec_size==0 ? (int)(LHS::vec_size) : (int)(RHS::vec_size) )};

 
 
je trouve ca moche .... y aurait il un equivalent de -fcond-mismatch valide e C+ ???


Message édité par Joel F le 31-07-2003 à 14:58:56
Reply

Marsh Posté le 31-07-2003 à 14:46:11   

Reply

Marsh Posté le 31-07-2003 à 14:52:33    

ben passe par une IfThenElse template. je touve ça laid ton ecriture, je sait meme pas si c'est possible

Reply

Marsh Posté le 31-07-2003 à 14:54:04    

C'est possible et ca marche et c standard :D ...  
mmm un IfThen template n'y fera rien car l'enum RESULTAT du IfThen sera d'un type différent de l'enum de BinaryNode. ...
 
je cherche plutôt le swithc de gcc pour faire taire le warning.

Reply

Marsh Posté le 31-07-2003 à 14:55:45    

à ben OK, fallait tout nous dire... ben cast alors... ou vire tes enums et utilises des constantes static

Reply

Marsh Posté le 31-07-2003 à 14:56:20    

Ooops j'avais pas pensez au const :P
je teste.
 
 
EDIT : OK, les const int vec_size = LHS::vec_size ? etc ...
ca passe. Merci ;)


Message édité par Joel F le 31-07-2003 à 14:58:41
Reply

Sujets relatifs:

Leave a Replay

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