Не совсем.Вы можете запутать свой код, вы можете отделить реализацию в файле impl
и включить его в заголовок, но он должен быть видимым для компилятора.
Однако, если естьТаким образом, вы можете ограничить количество используемых фактических специализаций, вы можете переместить специализированные реализации в файл cpp
, сохранить объявление в заголовке, и оно все равно будет работать:
header.h
template<typename X>
void foo(X x);
template<>
void foo<int>(int x);
impl1.cpp
#include "header.h"
template<>
void foo<int>(int x)
{
}
impl2.cpp
#include "header.h"
foo(1); //works
Кроме того, я не думаю, что вам следует беспокоиться об этом.Поскольку они являются общими, я не думаю, что шаблоны могут содержать в себе столько важной логики.Взгляните на стандартные - vector
, list
- конечно, им понадобится некоторое время, чтобы написать с нуля, но в этом нет никакой коммерческой коммерческой тайны.