LINUX.ORG.RU

Шаблоны и заголовочные файлы, с++


0

1

Подскажите пожалуйста, как оформлять шаблоны функций в заголовочных файла ?

к примеру код...
head1.h :

...
template < class T>
void f( T var );
... 

lib.cpp :

#include <head1.h>

template< class T >
void f( T var )
{
....
}
и в main.cpp :
#include "head1.h"
...
int main()
{
      ... 
      f( any );
      ...
      return 0;
}
вызывает ошибку в функции main() :
undefined reference to `void f<int>( int )`

здесь нашел :
Шаблоны компилируются только для конкретных параметров, поэтому они и «плавают» в заголовочных файлах целиком - шаблон не может быть откомпилирован в виде шаблона и в таком виде помещен в библиотеку

И как тогда быть ?


Все верно, либо целиком в .h-файле со всеми методами объявленными, как inline (явно или неявно). Либо обычным образом в .h- и .cpp-файлах, но со специализациями для конкретных типов (подходит, если ты заранее знаешь для каких типов будет использоваться шаблон)

mannaz ()

>Шаблоны компилируются только для конкретных параметров, поэтому они и «плавают» в заголовочных файлах целиком - шаблон не может быть откомпилирован в виде шаблона и в таком виде помещен в библиотеку

вот и ответ в вашем вопросе. Обычно делают шаблон обёрткой над некоторым классом, который не шаблонный, и потому его можно поместить в объектный файл. Сам шаблон надо компилировать всегда по разному, потому его принципиально нельзя поместить ни в библиотеку, ни в объектный файл.

drBatty ★★ ()

Шаблоны — это макросы на стероидах. Чтобы воспользоваться макросом, нужно видеть его целиком.

Miguel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.