Справка:
ИДОМ PIMPL (Указатель на IMPLementation) - это метод скрытия реализации, в котором открытый класс обертывает структуру или класс, которые невозможно увидеть вне библиотеки публичный класс является частью.
Это скрывает внутренние детали реализации и данные от пользователя библиотеки.
При реализации этой идиомы, почему вы размещаете общедоступные методы в классе pimpl, а не в публичном классе, поскольку реализации методов общедоступных классов будут скомпилированы в библиотеку, а пользователь имеет только заголовочный файл?
Чтобы проиллюстрировать этот код, он помещает реализацию Purr()
в класс impl и обертывает его.
Почему бы не реализовать Purr непосредственно в открытом классе?
// header file:
class Cat {
private:
class CatImpl; // Not defined here
CatImpl *cat_; // Handle
public:
Cat(); // Constructor
~Cat(); // Destructor
// Other operations...
Purr();
};
// CPP file:
#include "cat.h"
class Cat::CatImpl {
Purr();
... // The actual implementation can be anything
};
Cat::Cat() {
cat_ = new CatImpl;
}
Cat::~Cat() {
delete cat_;
}
Cat::Purr(){ cat_->Purr(); }
CatImpl::Purr(){
printf("purrrrrr");
}