В C ++ / CLI я хочу создать универсальный интерфейс с ограничением на тип, который ссылается на универсальный тип, который я собираюсь определить.Для справки вот C #, эквивалентный тому, что я хочу сделать:
public interface IFoo<T> where T : IFoo<T>
{ /* Foo methods */ }
Приведенный выше код компилируется нормально.Однако в C ++ / CLI следующий код не удается скомпилировать (поскольку «IFoo» не является типом »):
generic <typename T> where T : IFoo<T>
public interface class IFoo
{ /* Foo methods */ };
Я попытался добавить объявление forwards, но получил ограничения« error »универсальный параметр 'T' отличается от указанных в объявлении ":
generic <typename T>
interface class IFoo;
generic <typename T> where T : IFoo<T>
public interface class IFoo
{ /* Foo methods */ };
Попытка исправить это возвращает меня к первой ошибке:
generic <typename T> where T : IFoo<T>
interface class IFoo;
generic <typename T> where T : IFoo<T>
public interface class IFoo
{ /* Foo methods */ };
Я понимаю, что это в первую очередь ограничениекомпилятора C ++, но я надеялся, что где-нибудь может быть обходной путь.(Я использую Visual Studio 2015, если это имеет значение.)