Вместо написания шаблонной функции, которая принимает любую PathLike
, а также выполняет реальную работу, напишите шаблонную функцию, которая принимает любую PathLike
, преобразует ее в boost::filesystem::Path
, как показано, затем вызывает не шаблонную функцию ( чье определение может быть в .cpp), которое будет выполнять реальную работу.
В A.hpp
:
class A
{
public:
template <typename PathLike>
void myFunction(PathLike path);
private:
void myFunctionImpl(boost::filesystem::Path path);
};
template <typename PathLike>
void A::myFunction(PathLike path)
{
myFunctionImpl(convertToBoostPath(path));
}
In A.cpp
:
void A::myFunctionImpl(boost::filesystem::Path path)
{
// do something...
}
Это дает дополнительное преимущество: неправильное использование интерфейса приводит к ошибкам компилятора, а не к ошибкам компоновщика.