Bonjour à toute la tribu,
J'ai un souci avec l'utilisation des Generics en C++ .Net. Voilà ce que je veux faire:
-
- J'ai une interface générique écrite en C# que j'appelle IMyInterface
- J'ai une classe générique écrite en C++ que j'appelle MyClass et qui implémente IMyInterface
Voilà le bout de code pour la partie C#:
namespace GenericIssue { public interface IMyInterface<T> { } }
Et pour la partie C++:
// GenericIssueCpp.h #pragma once using namespace System; using namespace GenericIssue; namespace GenericIssueCpp { generic <typename T> public ref class MyClass : IMyInterface<T> { }; }
Jusque là tout va bien, ça compile sans problème.
Le souci arrive lorsque je veux ajouter une contrainte de type sur mon interface en C#: j'aimerais que celle-ci n'autorise que les structures (au sens C# du terme, càd des types valeur et non des types référence). C'est tout à fait possible en utilisant la contrainte suivante: where T:struct.
Voilà le bout de code en C#:
namespace GenericIssue { public interface IMyInterface<T> where T : struct { } }
Et le code C++, également avec une contrainte de type:
// GenericIssueCpp.h #pragma once using namespace System; using namespace GenericIssue; namespace GenericIssueCpp { generic <typename T> where T : value class public ref class MyClass : IMyInterface<T> { }; }
Et c'est là que ça coince: je n'arrive pas à trouver la bonne contrainte de type pour la partie C++ qui corresponde au fameux where T : struct du C#. J'ai essayé tout et n'importe quoi:
- - where T : ref class
- where T : value class
- where T : ref struct
- where T : value class
- where T: System::ValueType
Et le message d'erreur varie entre:
- - error C3214: 'T' : invalid type argument for generic parameter 'T' of generic 'GenericIssue::IMyInterface', does not meet constraint 'System::ValueType ^'
- error C3392: 'T' : invalid type argument for generic parameter 'T' of generic 'GenericIssue::IMyInterface', must have a public parameterless constructor
Quelqu'un a-t'il déjà rencontré ce type de problème ?
J'ai parcouru la doc des MSDN dans tous les sens, je n'ai rien trouvé en dehors de ça: [url]http://msdn2.microsoft.com/fr-fr/library/ms173640(en-us).aspx[/url]
Merci de votre aide !
++
thePoum