
El 16/08/2011 15:00, Szymon Gatner escribió:
My problem:
If there is a movable class 'MyMovable' (I use boost.move) it can be stored without unnecessary copies in move-aware vector that is declared like so:
vector<MyMovable> movables;
which is very cool until this vector is suppose be a member of other class like:
//widget.hpp
class Widget { vector<MyMovable> movables_; };
You always need the include, just like you needed it when MyMovable was copyable, move is an optimization it does not offer type erasure. If you need to break dependencies, use pimpl idiom for all your members (Warning: I haven't compiled it): //hpp //Note: no includes needed here for vector or MyMovable class Widget { Widget(); ~Widget(); private: //No explicit member declaration //shadow it behind Internals struct Internals; Internals *impl_; }; //cpp #include<vector> #include"MyMovable.h" struct Widget::Internals { vector<MyMovable> movables_; vector<MyMovable> movables2_; vector<MyMovable> movables3_; }; Widget::Widget() //Single allocation for all internal types : impl_(new Internals) {} Widget::~Widget() { delete impl_; } Best, Ion