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

