En un libro como éste, la simplicidad y brevedad de poner
definiciones inline dentro de las clases es muy útil porque
permite meter más en una página o pantalla (en un
seminario). Sin embargo, 67] ha apuntado que en un proyecto real esto tiene como
consecuencia el desorden de la interfaz de la clase y eso hace
que la clase sea más incomoda de usar. Él se refiere a los
métodos definidos dentro de las clases usando la expresión
in situ (en el lugar) e indica que todas
las definiciones deberían colocarse fuera de la clase
manteniendo la interfaz limpia. La optimización, argumenta él,
es una asunto distinto. Si se requiere optimizar, use la palabra
reservada inline
. Siguiente ese enfoque, el ejemplo
anterior Rectangle.cpp
quedaría:
//: C09:Noinsitu.cpp // Removing in situ functions class Rectangle { int width, height; public: Rectangle(int w = 0, int h = 0); int getWidth() const; void setWidth(int w); int getHeight() const; void setHeight(int h); }; inline Rectangle::Rectangle(int w, int h) : width(w), height(h) {} inline int Rectangle::getWidth() const { return width; } inline void Rectangle::setWidth(int w) { width = w; } inline int Rectangle::getHeight() const { return height; } inline void Rectangle::setHeight(int h) { height = h; } int main() { Rectangle r(19, 47); // Transpose width & height: int iHeight = r.getHeight(); r.setHeight(r.getWidth()); r.setWidth(iHeight); } ///:~
Listado 9.15. C09/Noinsitu.cpp
Ahora si quiere comparar el efecto de la funciones inline con la
versión convencional, simplemente borre la palabra
inline
. (Las funciones inline normalmente deberían
aparecen en los ficheros de cabecera, no obstante, las funciones
no-inline deberían residir en un propia unidad de
traducción). Si quiere poner las funciones en la documentación,
es tan simple como un «copiar y pegar». Las
funciones in situ requieren más trabajo y
tienen más posibilidades de provocar errores. Otro argumento
para esta propuesta es que siempre puede producir un estilo de
formato consistente para las definiciones de función, algo que
no siempre ocurre con las funciones in
situ.