информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяSpanning Tree Protocol: недокументированное применениеАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[C++Builder] Заработало, и все-таки я до конца не понял. 29.11.01 11:59  Число просмотров: 1066
Автор: 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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach