Установленный прецедент заключается в том, чтобы помещать такие вещи в специально (то есть последовательно) с именем вложенное пространство имен. Boost использует namespace details
, Loki использует namespace Private
. Очевидно, ничто не может помешать кому-либо использовать содержимое этих пространств имен, но оба названия передают смысл, что их содержимое не предназначено для общего потребления.
Как говорится, альтернативой является превращение func1
и func2
из шаблонов бесплатных функций в статические шаблоны функций-членов какого-либо общего класса; таким образом, helper
может просто быть частным членом указанного класса, невидимым для внешнего мира:
struct funcs {
template<typename T>
static void func1(T const& value) {
// ...
helper(value);
}
template<typename T>
static void func2(T const& value) {
// ...
helper(value);
}
private:
template<typename T>
static void helper(T const& value) {
// ...
}
};