туплю, template описанный в другом файле

pulmo

a.cpp
 
#include "types.h"

template <typename t> void a(t *src)
{
}

void b(int *src)
{
}

types.h
 
template <typename t> void a(t *src);
template <typename t> void c(t *src);
void b(int *src);

b.cpp
 
#include "types.h"
void test(int *src)
{
c(src); //это работает
b(src); //это работает
a(src); //а это НЕ работает (в смысле не компилируется)
}

template <typename t> void c(t *src)
{
}

пишет что-то вроде
Denoising error LNK2019: unresolved external symbol "void __cdecl с<int>(intr *)" (?$@Z) referenced in function "void __cdecl InitYUV(struct MFD *,unsigned long *,int)" (?@@Z)
что нужно сделать чтобы использовать как хотелось?

daru

afaik, экспорт шаблонов (в т.ч. шаблонных функций) современными компиляторами не поддерживается (оговорюсь: возможно и есть такие, но в дикой природе они не встречаются вроде). Более того, разработчики Стандарта уже давно ломают копья с этой проблемой. Современное состояние дискуссии мне не известно, но вроде даже собирались исключить экспорт шаблонов из стандарта.
Из очевидных засад - проблема раздельной компиляции cpp-файлов. В частности, при современном состоянии дел (компилятор/компоновщик) пришлось бы научить компоновщик инстанциировать шаблоны.
Возможно решение: вынести реализацию из cpp- в h-файл и включать его по необходимости.

freezer

по стандарту вроде так:

export template <typename t> void a(t *src);
export template <typename t> void c(t *src);


но я тоже не слышал чтобы кто-нить это поддерживал

pulmo

да, если в h файл вынести все нормально получается
зы: а export вообще не дает писать... (у меня vs.net 2003)

daru

ms vc7 не поддерживает и не планирует поддерживать export.
Говорят, что некий компилятор "комО" (Comeau) поддерживает (или пытается... )
Lastly, note that the C++ export keyword is intended to alleviate the original question. However, currently Comeau C++ is the only compiler which is being publicized to support export. See http://www.comeaucomputing.com/4.0/docs/userman/export.html and http://www.comeaucomputing.com/4.3.0/minor/win95+/43stuff.txt for some details.

pulmo

ну, я пожалуй не буду на столько извращаться, пусть в h'никах все лежит
Оставить комментарий
Имя или ник:
Комментарий: