Loại thủ thuật nào có thể được sử dụng để giảm thiểu khối lượng công việc của việc triển khai các lớp pImpl?Thực hiện pImpl với số lượng mã tối thiểu
Tiêu đề:
class Foo {
struct Impl;
boost::scoped_ptr<Impl> self;
public:
Foo(int arg);
~Foo();
// Public member functions go here
};
Thực hiện:
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)
Làm thế nào bạn sẽ cải thiện điều này, sử dụng Boost, có thể thừa kế, CRTP hoặc thủ đoạn khác để tránh càng nhiều mã boilerplate càng tốt? Hiệu suất thời gian chạy không phải là một vấn đề.
Trên thực tế, điều đó không thực hiện thành ngữ pimpl hoặc vì bạn chưa cố định constructor sao chép và phân công bản sao ' operator = 'trong Foo. –
Tôi thường không cần copyability (và scoped_ptr theo mặc định cung cấp noncopyability), nhưng bạn có một điểm, việc tạo ra các chức năng có thể được tự động là tốt. – Tronic