Допустим, у меня есть это:
struct foo {
template <typename T>
void bar(const T param) { cout << param << endl; }
};
Теперь я хочу добавить специализацию:
template <>
void bar<char>(const char param) { cout << static_cast<int>(param) << endl; }
Могу ли я просто добавить объявление в заголовок, что foo
объявлено в и определение bar<char>
в файле реализации foo
реализовано в?
Причина, по которой я спрашиваю, заключается в том, что локально я вижу, что это работает в обоих направлениях.Я думаю, что разница в том, что: специализированные шаблонные методы, которые я использую только для определения класса, могут быть определены в реализации.Кажется, что специальные методы шаблонов, которые я использую внешне, должны быть определены в заголовке.Я не смог найти ничего убедительного по этому поводу, поэтому подумал, что спросить.