2012-05-15 3 views
0

У меня есть класс, как этотDllImport и шаблоны в MS Visual C++

class A_DLL A 
{ 
    ... 
    template <class T> someFunction(const T &v); 
} 

в библиотеке A.DLL. A_DLL составляет __declspec(dllexport) при создании a.dll и __declspec(dllimport) при использовании a.dll.

Проблема в том, что я пытаюсь использовать 'someFunction' в каком-то исполняемом модуле, связанном с a.dll, он работает. Однако, когда я использую его в какой-либо другой библиотеке (b.dll), он дает мне сообщение об ошибке о нерешенных внешних (someFunction и других шаблонах). Очевидно, я не должен использовать __declspec на шаблонах, но как сделать класс с __declspec?

+0

Возможно, это не проблема. Не имеет значения, что вы называете это из exe или из dll. Вы уверены, что связываете оба с библиотекой? –

+0

И как библиотека, так и exe используют другие функции из a.dll без проблем. Безусловно, единственное решение, которое у меня есть, - сделать глобальные шаблонные функции (и добавить их как друзей в класс A). Кажется, это работает. –

ответ

4

Вы можете использовать декларацию как:

template class A_DLL MyTemplateClass<int>; 

Это заявление будет генерировать класс шаблона экземпляра и экспортировать его в DLL, которую вы строите (или импортировать его в зависимости от того, как A_DLL устанавливается из препроцессора).

Вы также можете следовать этому link для более подробного описания.