Как создать экземпляр шаблона в переполнении стека

Я хочу экспортировать шаблонные функции из DLL. Я знаю, что могу использовать метод специализации шаблона следующим образом.
func.hpp
/*declare*/
template<typename T>
DLL_EXPORTS T func(T para);


/*specialization*/
template<>
DLL_EXPORTS int func<int>(int para);

func.cpp
template<>
DLL_EXPORTS int func<int>(int para)
{return para;}

Если я использую шаблонную специализацию. Я должен переписать func код для каждого типа. Это не хорошее решение. Но это единственный способ найти C++ Primer,
Иногда я нашел другой способ из чужих кодов, как показано ниже.

func.hpp
/*declare*/
template<typename T>
DLL_EXPORTS T func(T para);

func.cpp
template<typename T>
DLL_EXPORTS T func (T para)
{return para;}


/*Instantiation*/
template
DLL_EXPORTS int func<int>(int);

Он использует template DLL_EXPORTS int func<int>(int) создать экземпляр шаблона. ты не можешь добавить <> после ключевого слова template, Этот способ также работает с шаблоном класса.

Мой вопросЯ не могу найти путь в книге. Поэтому я боюсь, что иногда это не сработает. Поддерживается ли это стандартом C ++?

4

Решение

Да, это называется явная реализация См. 14.7.2 стандарта C ++ 11 (извините, у меня нет C ++ 03 поблизости).

Вы можете создавать в своем модуле перевода столько экземпляров шаблона, сколько пожелаете, с любыми типами, которые вы хотите, и этот код будет помещен в вашу DLL. А все остальное просто не будет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector