Во время рефакторинга какого-то старого кода я удалил ряд общедоступных методов, которые должны были быть фактически статическими, поскольку они: а) не работают ни с одним из данных члена или не вызывают никаких других функций-членов; б) поскольку они могут оказаться полезными в другом месте.
Это заставило меня подумать о том, как лучше всего объединить функции "помощника". Путь Java/С# должен был бы использовать класс статических функций с частным конструктором, например:
class Helper
{
private:
Helper() { }
public:
static int HelperFunc1();
static int HelperFunc2();
};
Однако, будучи С++, вы также можете использовать пространство имен:
namespace Helper
{
int HelperFunc1();
int HelperFunc2();
}
В большинстве случаев я думаю, что предпочел бы подход к пространству имен, но я хотел знать, каковы плюсы и минусы каждого подхода. Например, если используется классный подход, будут ли какие-либо накладные расходы?