Problème avec C++ .NET Generics et contrainte de type

thePoum
Problème avec C++ .NET Generics et contrainte de type

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

hydoine

Bonjour thePoum,

Chez moi çà marche comme çà :

// GenericIssueCpp.h

#pragma once

using namespace System;
using namespace GenericIssue; 

namespace GenericIssueCpp
{
	generic <typename T> where T : value class, System::ValueType
	public ref class MyClass : IMyInterface<T>
	{
	};
}

Bonne journée,

thePoum

Et bin voilà, y'a qu'à demander :D
Ca marche nickel !!

Merci hydoine !

++
thePoum