![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Chaos A.D. |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Здравствуйте. Программирую я, значит, кое какой графический интерфейс, и использую VCL. После того, как я фактически реализовал то, что мне нужно, линкер отказывается связывать все в бинарник, мотивируя это тем, что, мол, не находит определения функции. Среда программирования - BCB 6. В проект включен файл, в котором определена эта функция. Помогите, в чем проблема? Вот код разных файлов. Если этого будет недостаточно, могу выложить несколько файлов целиком. А пока...
В чем же тут дело, коллеги --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
||||||||
|
|||||||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Вот блин, как всегда, руки до книг доходят в последнюю очередь, уже после того, как всю штукатурку со стен головой облупишь. Оказывается, параметризованные функции могут быть использованы только в том же модуле трансляции, где они объявлены. А у меня специфика кода как раз подразумевала использование их в другом месте. Кто нибудь знает, как можно решить такую проблемку - у меня имеется несколько классов, наследуемых от TFrame. И мне нужно, чтобы их можно было создавать по имени. Я сделал что-то вроде гомоморфного интерфейса классов, которые рулят этими Frame-ами, и определил make-функцию (производящую функцию в другой терминологии). Что я не учел, так это то, что определение make-функций нельзя поместить в другом .cpp файле. Есть какие нибудь идеи, как оставить всю гибкость классов, которые создают мои фреймы, и их гомоморфный интерфейс, и при этом оставить их параметризованными?
Говоря простым русским языком, можно ли придумать альтернативу статическим функциям шаблонных классов? Это сообщение отредактировал(а) Chaos A.D. - 6.6.2005, 15:49 --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Вынеси реализацию шаблонных фукнций в заголовочный файл.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Дело в том, что в заголовочном файле определен только общий интерфейс в виде виртуального класса. Все настоящие дела творятся в файле .cpp.
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Это ограничение шаблонов - их реализация должны быть в той же единице трансляции, что и их использование. Обычно с этом мирятся и выносят реализацию шаблонов в заголовочные файлы - посмотри, например, исходники библиотек шаблонов типа STL, ATL или WTL. Экспортируемые шаблоны, которые позволили бы избежать такое ограничение, Борладном не поддерживаются.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Юмор, да и только... Только что наткнулся в настройках борланда на опцию - "External Templates"
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| versus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 8.3.2005 Где: Переславль-Залесс кий Репутация: нет Всего: 3 |
>Экспортируемые шаблоны, которые позволили бы избежать такое ограничение, Борладном не поддерживаются
А они хоть кем-нибудь поддерживаются? GCC с ними тоже не дружит. |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Comeau поддерживает. Борланд, Вижуал, GCC - нет. OpenWatcom назвать компилятором Си++ трудно, там какой-то древнегреческий диалект. Про остальные компиляторы - не знаю. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Любопытно как это они делают
Наверняка без потери скорости не обходится, а на кой такое надо. |
|||
|
||||
| versus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 8.3.2005 Где: Переславль-Залесс кий Репутация: нет Всего: 3 |
> а на кой такое надо.
ну ясно на кой - чтобы конкуренты не увидели сурсов темплейтных определений. |
|||
|
||||
| Void |
|
||||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Насколько я понимаю, кодогенерация экспортируемых шаблонов откладывается на этап компоновки.
Дело не в потере скорости (которой, имхо, нет). Дело в том, что существующая реализация export templates - это полумера, потому что раздельной компиляции шаблонов как не было, так и нет. Просто мы избавляемся от необходимости определять шаблонный метод/класс в каждой единице трансляции.
http://www.comeaucomputing.com/4.0/docs/userman/export.html Да даже если б можно было - толку, если всего один компилятор поддерживает эту возможность. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||||
|
|||||||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Void проще говоря, это все лишь бутафория, а не экспорт?
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Да нет, почему же, с точки зрения стандарта, это является экспортом шаблонов. Другой вопрос, что найти для него практическое применение в таком виде сложно. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
В специальном издании "Главной книги" от Страуструпа пишется, что экспортируемые шаблоны - реальность, причем включенная в стандарт. Даже ключевое слово есть - export. Почему то у меня книги - всегда последняя инстанция. Надо бы привыкать лезть туда в первую очередь.
Это сообщение отредактировал(а) Chaos A.D. - 11.6.2005, 23:06 --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Да, в стандарт включена. Но возможно не надолго. Ибо реализация поддержки экспортируемых шаблонов в компиляторе ОЧЕНЬ трудоемка, а сама возможность экспортировать шаблоны не дает того, что от нее ожидается. -------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |