[C++] export template

erotic

Последняя вижл студия от Microsoft не поддерживает что-ли? Вроде в Струструпе написано, что по стандарту должно...
А компилятор пишет пару ошибок и ворнинг, что ключевое слово export еще не поддерживается, но заререзвировано для будущего использования...

bobby

это почти никто не поддерживает

erotic

А собираются поддерживать? Или им пох на стандарт?

okunek

>Или им пох на стандарт?
в какой-то книжке вычитал: "мы в микрософте всегда считаем, что стандарт можно улучшить..."
вот они его и улучшили

bobby

Что-то сомневаюсь, что будут
Вот этот компилятор вроде поддерживает, можешь его купить

erotic

Не, про йобнутость майкрософта я знаю, просто не ожидал, что почти никто не поддерживает.

okunek

Также насчет компиляторов, поддерживающих экспорт... я точно не уверен, но помнится, когда читал ман по icc 9-му, видел там параметр -export (собсно экспорт шаблонов)

erotic

Да хрен с ним, если такие проблемы вызывает. Обойдусь

Dasar

не понятен смысл поддержки такой фичи.
меж компиляторами она все равно не переносима - соответственно нормально не переносима и между несколькими проектами.
а внутри одного проекта - можно и h-никами пользоваться для этих же целей.

erotic

Лично для себя я вижу два плюса:
1. В случае изменения реализации какой-либо из функций шаблона не приходится перекомпилировать весь проект, а только определения шаблонов.
2. В отличия от включаемого .h файла с определениями шаблона, не приходится заботиться об изменении смысла выражений, которыми пользуешься в определении шаблона. К примеру, если у меня в файле template.h объявлен шаблон, который пользуется функцией std::min, то в зависимости от того, объявлю я в таком порядке:

#include "template.h"
#include <windows.h>

или в таком

#include <windows.h>
#include "template.h"

код скомпилится или нет. В первом случае - все в порядке. Во втором в файле windows.h определяются макросы min a max, которые портят всю малину. И я не могу предусмотреть такой вещи, что какой-либо из файлов, включенных до моего файла с шаблонами, не изменит нафиг все его поведение. Вот.

Dasar

эти два небольшие плюса не стоят того гемора, который придется преодолеть разработчикам чтобы реализовать вышеприведенную фичу.

erotic

Не могу с тобой согласиться.

ppplva

То есть считаешь что стоят ?
Тогда вперед, реализуй.

xronik111

export -- самая геморройно реализуемая фича С++ для компилятора, и кроме как в Comeau, ее нет нигде. В http://gcc.gnu.org/ml/gcc/2006-02/msg00122.html можно найти ссылку на статью про то, как ее реализовывали. Даже среди комитетчиков были разногласия насчет ее нужности. Тем не менее, плюсовые челы из gcc вроде как хотят в перспективе это сделать -- но не раньше, чем появятся link-time optimizations (инфраструктура которых для этого нужна т.е. на ближайшие 2 года об этом можно забыть.

Realist

По стандарту эта фича положена. Относительно недвано ее поддерживал только один коммерческий компилятор (мб сейчас больше). Более того, думаю, что справедливо утверждение: для каждого компилятора найдется фича стандарта, которую он не поддерживает (поддерживает неправильно). Использование экспорта шаблонов необязательно приводит к уменьшению времени сборки. Самая разумная практическая польза: обеспечение локальности, то есть то, о чем говорится в примере с min. Возьмите себе за правило закрывать макросы командой #undef, если только они не должны быть видны ниже. Оберните windows.h в свой localwindows.h:

#include <windows.h>
#undef min

Использование экспорта шаблонов в настоящее время не рекомендуется, ибо непереносимо.
Вопросу экспорта шаблонов посвещена отдельная тема в книге Герба Саттера "Новые сложные задачи на C++".
Оставить комментарий
Имя или ник:
Комментарий: