Здравствуйте, Qbit86, Вы писали:
V>>Можно экспортировать специализации шаблонов.
Q>А если специализаций нет, весь код обобщённый?
Значит он сугубо библиотечный под неизвестные типы, и?
Q>Экспортировать можно только для типов, известных заранее автору библиотеки.
Ну, например в Хаскеле "библиотеки" представляют из себя пару — некий бинарный код (если есть) и предварительно-распарсенное текстовое AST библиотечного обобщённого кода.
Q>Явные инстанцирования для пользовательских типов так не сделать. Такой подход обсуждался в ветке про распухание бинарного кода.
Опять пустозвонство. Если распухание страшно, какие проблемы использовать динамический полиморфизм или static cast?
Или у нас в дотнете всегда в List<T> хранятся value-типы? Ты в сравнении с чем своё "распухание" сравниваешь? И какое из распуханий более страшное — на диске или в оперативной памяти? Какой из ресурсов у нас более ограничен-то?
Если хранятся ссылочные данные, то все инстансы vector<T*> будут заведомо склеены, ес-но. А в дотнете для ВСЕХ value-type джит породит НЕЗАВИСИМЫЕ реализации и засерет ими память, даже если бы их потенциально можно было бы "склеить".
ИМХО, тут даже сравнивать нечего — дотнете ВСЕГДА жрет больше памяти под код и под данные.
Далее, даже если без "скейки". Вот у нас есть некий контейнер указателей (аналог List<T> дотнета, где T — ссылочный тип).
Ничто не мешает нарисовать базовый "нетипизированный" вариант такого контейнера, а затем к нему инлайн-обёртку, которая будет в публичных методах принимать только "типизированные" указатели и возвращать такие же. Ву а ля или еще нет?