«Традиционный» класс C ++ (только некоторые случайные объявления) может выглядеть следующим образом:
class Foo
{
public:
Foo();
explicit Foo(const std::string&);
~Foo();
enum FooState
{
Idle, Busy, Unknown
};
FooState GetState() const;
bool GetBar() const;
void SetBaz(int);
private:
struct FooPartialImpl;
void HelperFunction1();
void HelperFunction2();
void HelperFunction3();
FooPartialImpl* m_impl; // smart ptr
FooState m_state;
bool m_bar;
int m_baz;
};
Я всегда находил этот тип спецификации уровня доступа уродливым и трудным для подражания, если оригинальный программист не организовывал аккуратно свои «области доступа».
Взглянув на тот же фрагмент в стиле Java / C #, мы получим:
class Foo
{
public: Foo();
public: explicit Foo(const std::string&);
public: ~Foo();
public: enum FooState
{
Idle, Busy, Unknown
};
public: FooState GetState() const;
public: bool GetBar() const;
public: void SetBaz(int);
private: struct FooPartialImpl;
private: void HelperFunction1();
private: void HelperFunction2();
private: void HelperFunction3();
private: FooPartialImpl* m_impl; // smart ptr
private: FooState m_state;
private: bool m_bar;
private: int m_baz;
};
На мой взгляд, это гораздо легче прочитать в заголовке, потому что спецификатор доступа находится рядом с целью, а не рядом строк. Я нашел это особенно верно при работе с шаблоном кода только для заголовка, который не был разделен на обычную пару "* .hpp / *. Inl". В этом сценарии размер реализации функций перекрыл эту небольшую, но важную информацию.
Мой вопрос прост и проистекает из того факта, что я никогда не видел, чтобы кто-то еще активно делал это в своем коде C ++.
Предполагая, что у меня нет IDE с поддержкой "Class View", есть ли какие-либо очевидные недостатки использования этого уровня многословия?
Любые другие рекомендации по стилю приветствуются!