Связаны ли шаблонные специализации с заголовком или исходным файлом?

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

Ответ 1

Если это специализированные функции, вы можете поместить их в файл .cpp или сделать их встроенными в заголовок.

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

Затем вы можете поместить реализации (определения) в файл .cpp. Как и другие функции.

Ответ 2

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

Таким образом, он не может быть определен в нескольких единицах перевода, если только он не объявлен inline.