Требуются ли специализированные шаблоны для специального объявления? - PullRequest
0 голосов
/ 27 сентября 2018

Мне нужна шаблонная функция, которая определена только для определенных типов, поэтому я пишу:

/* --- header file with just a declaration --- */
template<class T>
void myFunction(T arg);

/* --- cpp file with specialized definition --- */
template<>
void myFunction<int>(int arg){
    // mybody
}

Но я немного запутался, читая, например, этот ответ .Является ли объявление в заголовочном файле достаточно хорошим, чтобы компоновщик всегда ссылался на одну и ту же специализацию (статическая связь)?Или мне нужно добавить еще:

template<>
void myFunction<int>(int arg);

в шапке к?

1 Ответ

0 голосов
/ 27 сентября 2018

Часть, на которую вы должны смотреть из поста, который вы связали:

Если шаблон, шаблон элемента или элемент шаблона класса явно специализированы, то эта специализация должна быть объявлена ​​до первого использования этой специализации, которая может привести к неявной реализации в каждой единице перевода, в которой происходит такое использование [...]

Выможно создать такое объявление через явное объявление экземпляра, которое сообщает компилятору, что явная специализация находится где-то еще.

в заголовочном файле вы можете объявить явное создание экземпляра как

extern template void myFunction(int)
...