> -- Алексей Елин писал(а):
> Это и есть интерфейсы. Суть интерфейса - возможность рассматривать ЛЮБОЙ тип как объект ДРУГОГО (интерфейсного) типа с ДРУГИМ "набором интерфейсных функций".
Это понятно. Но я говорил о том, что в случае "истинных генериков" (максимально обобщённых), у нас нет первичности производства генериков или типов аргументов для них. То есть ни типы-"аргументы" "не знают", будут ли они использоваться аргументами параметризации генериков, ни уж, тем более, генерики не знают про все типы, которыми они будут параметризироваться(конретизироваться)...

> -- Алексей Елин писал(а):
> Есть несколько подходов. Самый простой - физически создавать именно ссылки, а для пользователья представлять их как экземпляры (что то вроде _box-ing в .Net).
ОЧЕНЬ не эффективно в смысле быстродействия...

> -- Алексей Елин писал(а):
> Но можно менять и физический размер инстанцированного типа, что намного сложнее и требует поддержки со стороны среды выполнения.
МЕНЯТЬ? Скорее всего, вы имели в виду «производить, скорее всего новые варианты инстанцирования»?
Возникают вопросы - «где»? На стороне модуля-обявителя генерика или в модуле, где генерик параметризуется? Если второй вариант – как избежать дублирования инстанцирования одинаковыми типами, что бы не было неэффективности по памяти?

И ещё одна проблема. Типобезопасность. Я понимаю, как она решается в случае Си++ - там время компиляции. А вот в уже скомпилированном модуле это проверять? Даже по предлагаемому вами варианту? Придумывать «увязку с компилятором» для проверок?

> -- Алексей Елин писал(а):
> Есть и комбинированные подходы.
Какие?