Недавно я сделал стилистическое изменение и хотел увидеть, как другие программисты на C++ чувствовали к нему и были ли какие-то недостатки.
По сути, когда мне нужна функция утилиты, которая не нуждается в доступе к данному члену класса, то, что я делал, было примерно таким:
file.h
class A {
public:
// public interface
private:
static int some_function(int);
};
file.cpp
int A::some_function(int) {
// ...
}
Но в последнее время я предпочитаю делать что-то большее:
file.cpp
namespace {
int some_function(int) {
}
}
// the rest of file.cpp
Вот мой мыслительный процесс:
- это еще один файл для редактирования
- просто наличие функции, которая будет указана в файле заголовка, может намекать на детали реализации которые не подлежат раскрытию (даже если они недоступны для публики).
- Если прототип функции нужно изменить, нужно перекомпилировать только один файл.
Последний является самым убедительным для меня. Поэтому мой вопрос: есть ли какие-то недостатки?
Они функционально эквивалентны для большинства целей, о которых я могу думать. Мне кажется, что функция private static
почти всегда может быть преобразована в свободную функцию в анонимном namespace
.
EDIT. Одна вещь, которая приходит на ум, состоит в том, что функция private static
имела бы доступ к private
членам, если указана указатель на объект для работы, но если это произойдет, почему бы не сделать его членом static
?
Что вы, ребята, думаете?