Ответ 1
Создайте отдельный файл с именем utility.hpp
и поместите в него все объявления функций, предпочтительно под его собственным пространством имен, которое может быть просто utility
, а затем поместите определения в utility.cpp
. Если какая-либо из функций утилиты является шаблоном функции, вы должны поместить определение в заголовок.
Избегайте определять утилиту class
и помещать в нее все функции утилиты как члены static
. Это серьезно плохая идея. Одна из причин, по которой это плохо, заключается в том, что он не может воспользоваться аргументом Dependent name Lookup (ADL).
Вместо этого используйте пространство имен.
Пример
//utility.hpp
namespace utility
{
void function1();
void function2();
void function3();
template<typename T>
void function4()
{
//function template definition should be here!
}
}
И затем,
//utility.cpp
#include "utility.hpp"
namespace utility
{
void function1()
{
//code
}
void function2()
{
//code
}
void function3()
{
//code
}
}