Каждый раз, когда у меня есть какая-то функциональность, относящаяся к «полезности», я в конечном итоге задаюсь вопросом, какой вариант лучше. Например, печать структур сообщений (собственных или внешних), некоторый код кодирования/декодирования или просто несколько полезных функций преобразования в контексте, в котором я работаю.
Варианты, о которых я думаю, следующие:
1) Статическая функция во вспомогательном классе/структуре.
struct helper
{
static bool doSomething(...);
};
2) Функция, не являющаяся членом.
namespace helper
{
bool doSomething(...);
}
3) Статическая функция, не являющаяся членом.
namespace helper
{
static bool doSomething(...);
}
В некоторых случаях может потребоваться инициализировать или сохранить состояние в «утилите», поэтому я выбираю вариант 1, чтобы избежать «глобального» состояния. Однако, если нет состояния, которое нужно сохранить, следует ли мне выбрать вариант 2 или 3? В чем практическая разница между вариантом 2 и 3?
Что важно учитывать и есть ли предпочтительный способ для этого? Спасибо!