Quels types d'astuces peuvent être utilisés pour minimiser la charge de travail liée à l'implémentation de classes pImpl?Implémentation de pImpl avec un minimum de code
tête:
class Foo {
struct Impl;
boost::scoped_ptr<Impl> self;
public:
Foo(int arg);
~Foo();
// Public member functions go here
};
Mise en œuvre:
struct Foo::Impl {
Impl(int arg): something(arg) {}
// All data members and private functions go here
};
Foo::Foo(int arg): self(new Impl(arg)) {}
Foo::~Foo() {}
// Foo's public functions go here (and they refer to data as self->something)
Comment améliorer cela, en utilisant Boost, peut-être l'héritage, CRTP ou d'autres astuces pour éviter autant code boilerplate que possible? La performance d'exécution n'est pas un problème.
En fait, cela ne met pas en œuvre l'idiome Pimpl soit parce que vous ne l'avez pas fixé le constructeur de copie et l'affectation de copie ' operator = 'dans Foo. –
Je n'ai généralement pas besoin de copier (et scoped_ptr fournit par défaut une non-occlusion), mais vous avez un point, la création de ces fonctions pourrait également être automatisée. – Tronic