Универсальный интерфейс C ++ / CLI с рекурсивным ограничением типов - PullRequest
0 голосов
/ 20 июня 2019

В 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, если это имеет значение.)

...