[C#/résolu] type template avec méthodes connues par avance

type template avec méthodes connues par avance [C#/résolu] - C#/.NET managed - Programmation

Marsh Posté le 13-11-2006 à 12:29:12    

Bonjour à tous,
 
Je cherche à implémenter un tas de fibonacci de façon générique. C'est un arbre qui peut stocker les clés et les ordonner.
J'ai donc besoin que le template sache que le type des éléments ait un opérateur de compraison (< ou > ).
 
Avec ce code:

Code :
  1. public class TasFibo<T>
  2. {
  3.   bool inferieur(T val1,T val2)
  4.   {
  5.     return val1<val2;
  6.   }
  7. }


...le compilateur se plaint que le type T ne possède pas l'opérateur <.
 
J'ai cherché la syntaxe, qui me dit-on doit exister, mais je ne l'ai pas trouvé.... avez-vous déjà fait ce genre de chose?
 
Accessoirement: y a t-il une bonne librairie C# gratuite implémentant un tas de Fibonacci?


Message édité par nargy le 13-11-2006 à 13:43:35
Reply

Marsh Posté le 13-11-2006 à 12:29:12   

Reply

Marsh Posté le 13-11-2006 à 12:39:21    

Tu as regardé du coté d'IComparable?


Message édité par masklinn le 13-11-2006 à 12:39:44

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-11-2006 à 13:13:51    

pour que le compilo ne rale pas, faut lui spécifié que les objets qui seront passé, doivent posséder l'opérateur en question...
 
public class TasFibo<T> where T ....
{  
    bool inferieur(T val1,T val2)  
    {    return val1<val2;  }
}  
 
ou les "..." représenterais l'opérateur que doit posséder l'objet T...  
Maintenant, je ne sais pas comment le spécifié, regarde du coté de la doc (CONSTRAINT)
 PS: ou tu spécifie dans les contraintes, que les objets doivent implémenté l'interface ICOMPARABLE...


Message édité par moi23372 le 13-11-2006 à 13:14:30
Reply

Marsh Posté le 13-11-2006 à 13:43:02    

Ouiiii!!!
merci les gars...
la syntaxe est (doc msdn):

Code :
  1. public class MyGenericClass<T> where T:IComparable { }

Reply

Sujets relatifs:

Leave a Replay

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