PB de conception générique
Bonjour,
Je vais essayer d'être clair !
Je voudrais développer une machine virtuelle avec un type de mesure générique mais avec un contrainte de type comparable !
Dans l'idée un code du genre :
Code:
1 2 3
| Public Class Machine(Of C As Comparable(Of C))
...
End Class |
avec
Code:
1 2 3 4 5 6 7 8 9 10 11
| Public Class Comparable(Of C)
Public Property Value As C
'implicit _Value variable
Public Shared Operator =(Left As Comparable(Of C), Right As Comparable(Of C)) As Boolean
Return Comparer(Of M).Default.Compare(Left.Value, Right.Value) = 0
End Operator
...
End Class |
Bien quel est mon souci ?
Si je fais un test du style :
Code:
1 2 3
| Public Class MachineLong
Inherits Machine(Of Long)
End Class |
J'obtiens :aie:
Citation:
Erreur BC32044 L'argument de type 'Long' n'hérite pas ou n'implémente pas le type de contrainte 'Comparable(Of Long)'. Cube D:\Cube\Cube\Test\MachineLong.vb 1 Actif
Sachant que le type de mesure générique (ici C) peut être n'importe quoi, mais doit pouvoir être comparé à l'aide des opérateurs (=, <>, <=, >=,<,>)
Je pourrais passer par les objets mais c'est pas beau et surtout rien ne garanti à l'exécution que le type est vraiment comparable.
J'ai essayé une interface, mais on ne peut pas définir les opérateurs (ou pour être plus précis je ne sais pas si c'est faisable, ni comment le faire).
Bref, après 15 jours d'essais infructueux, et tous plus tordus les uns que les autres, j'avoue mon incompétence notoire et sans honte :roll:
D'où mes questions
- où est mon erreur et surtout pourquoi ?
- comment faire pour que ça marche ?
- ou comment imposer de développer les opérateurs ?
Conclusion : Au Secours, Help Please !
PS: en l'occurrence deux machines pilotables, une qui mesure une température et l'autre qui renvoie une liste de fréquences et intensités sonores au point considéré (X,Y et Z de type Long)
L'algorithme qui utilise ces machines pilotables, recherche les minimas et maximas (potentiellement multiples) dans le volume considéré.
Si à la base je n'arrive pas à le faire pour un type simple ... :calim2: