Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
[C++Builder] Как правильно экстернировать шаблон-функцию не член класса. 28.11.01 18:12 Число просмотров: 1092
Автор: 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
|
<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;
Тем кто прочел этот бред спасибо. Постараюсь больше такую хрень на доску не кидать.
|
|
|