Не секрет, что С++ не очень хорошо отделяет интерфейс от реализации, и просмотрев заголовочный файл того или иного класса можно хоть и немного, но понять внутреннее устройство класса. Так же есть еще один весомый недостаток: при некотором изменении внутреннего устройства класса необходимо пересобрать все модули, которые его включают.
Кое-где предлагают решать эту проблему при помощи класса-обертки. Применяется ли этот подход в крупных проектах и есть ли более красивое решение?
Вот пример такого подхода:
// rectangle_impl.h
class RectangleImpl {
int x, y;
public:
RectangleImpl(void);
void set_values (int,int);
int area (void);
};
// rectangle.h
class RectangleImpl;
class Rectangle {
public:
Rectangle(void);
void set_values (int,int);
int area (void);
private:
RectangleImpl *impl;
};
// rectangle.cpp
//...
Rectangle::Rectangle() {
impl = new RectangleImpl;
}
Rectangle::set_values(int w, int h) {
impl->set_values(w, h);
}
//...
Спасибо за внимание.