C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
template & Release & inline, запрет форсирования inline
Asher
Отправлено: 20.06.2005, 16:14


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.

Так как текущие реализации компиляторов не поддерживают разделение интерфейса и реализации шаблонов по разным единицам трансляции, то вполне естественным выглядит желание писать шаблон как единую структутру, т.е. интерфейс сразу с реализацией.
При Release-компиляции компилятор на многие из функций жалуется, что не может сделать их inline, хотя спецификатор inline в объявлении отсутствует.
Как следствие этого сообщения подозреваю, что те шаблонные функции, на которые нет варнинга компилятором были сделаны inline.
A мне не надо их делать inline. wink.gif
Да и в такой толпе варнингов тяжело искать те, которые действительно важны.
Может есть какая опция к компилятору, запрещающая делать inline, если это не указано явно в спецификации функции?
Gedeon
Отправлено: 21.06.2005, 12:23


Ветеран

Группа: Модератор
Сообщений: 1742



м.б.
CODE

#pragma intrinsic [-]function-name
Asher
Отправлено: 21.06.2005, 13:15


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Я видел эту прагму, но так и не смог заставить ее работать с методом класса.
Да и как-то нездорово это — к каждой функции подписывать лишнюю строку для исправления непрошенного инлайна. cool.gif
olegenty
Отправлено: 21.06.2005, 19:02


Ветеран

Группа: Модератор
Сообщений: 2412



блин, натыкался где-то на рашение, но в упор не помню где...
olegenty
Отправлено: 10.11.2006, 16:33


Ветеран

Группа: Модератор
Сообщений: 2412



2 Asher
ты эту проблему решил? чё-то я не могу, и от этого как-то мне грустно...
Asher
Отправлено: 13.11.2006, 10:17


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Нет не решил.
Пока каждый раз оборачиваю шаблон в
CODE

#ifdef __BCPLUSPLUS__
#pragma warn -8026
#endif

ну и соответственно
CODE

#ifdef __BCPLUSPLUS__
#pragma warn +8026
#endif

То есть просто давлю warning.
#ifdef __BCPLUSPLUS__ присутствует в коде по причине плавной миграции на MS VC cool.gif
Там это нормально реализовано — в ключах компиляции.
olegenty
Отправлено: 13.11.2006, 10:23


Ветеран

Группа: Модератор
Сообщений: 2412



а как вариант — тупо объявить все шаблонные методы как virtual? (отдавая себе отчёт, к чему это приведёт)

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

Вернуться в Вопросы программирования в C++Builder