A ++ clase "tradicional" C (sólo algunas declaraciones al azar) podría parecerse a lo siguiente:Clase C++ especificador de acceso Verbosidad
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;
};
Siempre he encontrado este tipo de especificación de nivel de acceso feo y difícil de seguir si el programador original no organizó sus "regiones de acceso" ordenadamente.
Echando un vistazo al mismo fragmento en un # del estilo de Java/C, obtenemos:
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;
};
En mi opinión, esto es mucho más fácil de leer en una cabecera debido a que el especificador de acceso es correcto al lado del objetivo, y no a un montón de líneas de distancia. Esto me pareció especialmente cierto cuando trabajaba con un código de plantilla de solo encabezado que no estaba separado en el par usual "* .hpp/*. Inl". En ese escenario, el tamaño de las implementaciones de funciones superó esta pequeña pero importante información.
Mi pregunta es simple y se debe al hecho de que nunca he visto a alguien más hacer esto en su código de C++.
Suponiendo que no tengo un IDE con "Vista de clases", ¿hay algún inconveniente obvio al uso de este nivel de detalle?
¡Se recomiendan otras recomendaciones de estilo!
En cuanto a las definiciones de las funciones de la plantilla directamente en la definición de la clase ... está bien para las frases sencillas, pero realmente hace que sea difícil entender la interfaz de la clase tan pronto como crece. Personalmente, no separe mi encabezado en .h/.i, pongo. Pongo las definiciones de las funciones * big * en la parte inferior del archivo. –