информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеАтака на InternetПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++Builder] Заработало, и все-таки я до конца не понял. 29.11.01 11:59  Число просмотров: 983
Автор: Xan Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Ну, смотри, если я в одном исходнике определяю шаблон то преспокойно юзаю его:
template <class T> int __fastcall
LocalItems(T,Graphics::TBitmap* BmpX)
{   T* pBmpX;
    int n=0;
// ..... тра-ля-ля - неважно что;
return n;
}

---
В нужном месте своего сырца я его формирую с нужным типом так:
LocalItems((BYTE)0, MyRealBitmap);

---
Все отлично.

Теперь я помещаю этот шаблон в другой сырец, и вот тут я не знал как это правильно сделать, потому как простую функцию я могу описать как
extern, в первом сырце указать ее прототип и все будет ок, а с шаблоном как быть. Объявить его в другом сырце как
extern template <class T> int __fastcall
LocalItems(T,Graphics::TBitmap* BmpX);

--- - значит поставить extern на пустышку, поскольку как я думал, на этапе линковке еще не известно по каким адресам будут располагаться тела реально сформированных функций а тогда как их подвязать. В итоге я так и сделал, более того это работает, но тогда получается, что я совсем не понимаю как вызываются функции и как они вызываются, будучи описанные как extern;
Тем кто прочел этот бред спасибо. Постараюсь больше такую хрень на доску не кидать.
<programming>
[C++Builder] Как правильно экстернировать шаблон-функцию не член класса. 28.11.01 15:31  
Автор: Xan Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Че-то не могу никак врубиться: если в одном исходнике пишу С++ функцию
описываю как extern, то объявив в сырце главной формы ее прототип,( не в классе, а просто) все нормально. А если как шаблон - ничего не выходит - невозможно слинковат, как будто ее и нету. Чувствую в какой-то ерунде ошибка. Читал ман, но там для длл-ки пример приводится.
[C++Builder] Как правильно экстернировать шаблон-функцию не член класса. 28.11.01 18:12  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Че-то не могу никак врубиться: если в одном исходнике пишу
> С++ функцию
> описываю как extern, то объявив в сырце главной формы ее
> прототип,( не в классе, а просто) все нормально. А если как
> шаблон - ничего не выходит - невозможно слинковат, как
> будто ее и нету. Чувствую в какой-то ерунде ошибка. Читал
> ман, но там для длл-ки пример приводится.

Naskol'ko ya dogadyvajus', tebe vydaet "instanciate" error ....
i naskol'ko ya ponimaju vse pravil'no, tak i dolzhno byt' .... ty ne mozhesh' ob'yavit' "template function" kak "extern"...
vse chto ty mozhesh', eto "instanciate" funkciu, a potom uzhe s nim trjuki vytvoryat' ...
libo podkin' kusok koda, kak objavil funkciu, kak ego usaesh', i t.d ... i objazatel'no ves' error list.
togda stanet bolee ponyatno.

udachi
[C++Builder] Заработало, и все-таки я до конца не понял. 29.11.01 11:59  
Автор: Xan Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Ну, смотри, если я в одном исходнике определяю шаблон то преспокойно юзаю его:
template <class T> int __fastcall
LocalItems(T,Graphics::TBitmap* BmpX)
{   T* pBmpX;
    int n=0;
// ..... тра-ля-ля - неважно что;
return n;
}

---
В нужном месте своего сырца я его формирую с нужным типом так:
LocalItems((BYTE)0, MyRealBitmap);

---
Все отлично.

Теперь я помещаю этот шаблон в другой сырец, и вот тут я не знал как это правильно сделать, потому как простую функцию я могу описать как
extern, в первом сырце указать ее прототип и все будет ок, а с шаблоном как быть. Объявить его в другом сырце как
extern template <class T> int __fastcall
LocalItems(T,Graphics::TBitmap* BmpX);

--- - значит поставить extern на пустышку, поскольку как я думал, на этапе линковке еще не известно по каким адресам будут располагаться тела реально сформированных функций а тогда как их подвязать. В итоге я так и сделал, более того это работает, но тогда получается, что я совсем не понимаю как вызываются функции и как они вызываются, будучи описанные как extern;
Тем кто прочел этот бред спасибо. Постараюсь больше такую хрень на доску не кидать.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach