Una classe "classica" C++ (solo alcune dichiarazioni casuali) potrebbe essere simile al seguente:C++ di accesso di classe Verbosity
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;
};
ho sempre trovato questo tipo di specifica livello di accesso brutta e difficile da seguire se il programmatore originale non ha organizzato ordinatamente le sue "regioni di accesso".
Dando uno sguardo allo stesso frammento in # stile Java/C, otteniamo:
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;
};
A mio parere, questo è molto più facile da leggere in un colpo di testa, perché lo specificatore di accesso è di destra vicino all'obiettivo, e non a un gruppo di linee. Ho trovato questo particolarmente vero quando si lavora con il codice del modello di solo header che non è stato separato nella solita coppia "* .hpp/*. Inl". In questo scenario, le dimensioni delle implementazioni di funzioni hanno sopraffatto questa piccola ma importante informazione.
La mia domanda è semplice e deriva dal fatto che non ho mai visto nessun altro attivamente fare questo nel loro codice C++.
Supponendo che non disponga di un IDE abilitato per "Visualizzazione di classe", esistono alcuni ovvi inconvenienti nell'utilizzo di questo livello di verbosità?
Qualsiasi altro suggerimento di stile è benvenuto!
Come per le definizioni delle funzioni del modello direttamente nella definizione della classe ... va bene per le one-liner ma rende davvero difficile comprendere l'interfaccia di classe non appena cresce. Personalmente non separo la mia intestazione in .h/.i, metto che metto le definizioni delle funzioni * big * in fondo al file. –