我仍然是C++11的新手。
一段时间前,我问了以下问题:
Best method to implement an abstract factory pattern
为了更深入的研究,我想知道这个C++成语的名字是什么。
我在这里叫它pimpl,但我不确定这是不是正确的名称。
整个操作的目的是在从工厂返回Shape对象时隐藏原始指针或智能指针。使用这个“模式”工厂将能够返回一个相同的类型,并且特定的实现将被封装在对象中。
它也非常类似于decorator,除了它不装饰任何东西。
除了外部接口与“内部”接口相同之外,还可以发现与adapter的相似之处。
class PimplShape : public Shape{
Shape *sh;
public:
PimplShape(Shape *sh) : sh(sh){
}
virtual ~PimplShape() override{
delete sh;
}
virtual void process() override {
sh->process();
}
};发布于 2015-07-21 16:27:51
我个人的观点是,你在多个习语之间炮制了一些东西。
pimpl的思想是隐藏提供实际功能的内部类,以便您可以在不影响用户的情况下随心所欲地进行更改(Qt在这方面做得非常广泛)。如果我们看看你的代码,有两件事是禁止的-继承和方法在类定义中实现的事实(因此内部类的方法对类的用户是可见的)。在您的情况下,适当的pimpl应该是:
// PimplShape.h
class Shape;
class PimplShape
{
Shape *sh_;
public:
PimplShape(Shape *sh);
~PimplShape();
void process();
};
// PimplShape.cpp
#include "Shape.h" // Defines Shape::process() so PimplShape can use it
PimplShape::PimplShape(Shape *sh) : sh_(sh)
{
}
PimplShape::~PimplShape()
{
delete sh_;
}
void PimplShape::process()
{
sh_->process();
}正如您在这里看到的,Shape类对PimplShape.h文件的任何用户都是隐藏的。
如果我们从功能的角度看你的例子,似乎你想实现CRTP,但这不是实现它的方法。
https://stackoverflow.com/questions/31533416
复制相似问题