Нарушением инкапсуляции это довольно сложно назвать, ибо приватные функции все ещё остаются приватными с точки зрения других классов. Сокрываете вы реализацию методов класса от других сущностей в вашем коде, а не от программиста (если я правильно понял причину по которой вы решили, что это нарушение инкапсуляции).
Мне нравится метод организации данного кода следущим образом:
Foo.h
template <typename T>
struct Foo
{
void doSomething(T param);
};
#include "Foo_impl.h"
Foo_impl.h
template <typename T>
void Foo<T>::doSomething(T param)
{
//implementation
}
Код украл отсюда
https://stackoverflow.com/questions/495021/why-can...