Cuando uso el idioma pimpl, ¿es una buena idea poner todas las definiciones de métodos dentro de la definición de clase? Por ejemplo:Poner todos los métodos en la definición de clase
// in A.h
class A {
class impl;
boost::scoped_ptr<impl> pimpl;
public:
A();
int foo();
}
// in A.cpp
class A::impl {
// method defined in class
int foo() {
return 42;
}
// as opposed to only declaring the method, and defining elsewhere:
float bar();
};
A::A() : pimpl(new impl) { }
int A::foo() {
return pimpl->foo();
}
Por lo que yo sé, los únicos problemas con poner una definición de método dentro de una definición de clase es que (1) la aplicación es visible en los archivos que incluyen la definición de clase, y (2) el compilador puede hacer el método en línea.
Estos no son problemas en este caso ya que la clase se define en un archivo privado, y la inclusión no tiene ningún efecto ya que los métodos se llaman en un solo lugar.
La ventaja de poner la definición dentro de la clase es que no tiene que repetir la firma del método.
Entonces, ¿está bien? ¿Hay algún otro problema que tener en cuenta?
¿Qué es un archivo __private__? – ezpz
@ezpz: ese no es un concepto de C++. Es solo un archivo que los usuarios de la clase no # incluyen para que los cambios en la implementación no los afecten. – Amnon
Esto es precisamente lo que solía hacer. Para mí, este método funcionó muy bien. –