推荐一种有用的C++设计模式——PImpl

2024-04-19 19:04:22 浏览数 (2)

PImpl的全程是:“Pointer to Implementation”,主要用于隐藏一个类的实现细节。在C 中通过将类的实现细节移到一个单独的类,主类通过包含该类的指针实现功能的调用,从而完成隐藏类实现的功能。

实现方式如下:

代码语言:javascript复制
class VideoControl{
public:
    virtual void doSomething() = 0;
    virtual ~VideoControl() = default;
};

class VideoControlImpl : public VideoControl {
public:
    void doSomething();
};

class Widget {
public:
    Widget();
    ~Widget();
    void doSomething();
private:
    VideoControl* pImpl;
};

如上,上面的代码我们要实现的功能是对外提供一个doSomething()的方法,但是又想对外隐藏实现的细节。因此在实现过程中,定义了一个抽象类VideoControl,然后创建了一个实现类VideoControlImpl 实现具体的功能,从而达到对外隐藏实现的细节。

Impl模式常被应用于SDK的开发中,日常以SDK的方式给第三方进行使用,在大型项目中使用除了上述的优点外还具备以下特点:

  • 减少编译依赖:实现类的头文件发生改变时,只有实现类需要重新编译,主类可以保持不变,从而减少了编译时间。
  • 降低编译时间:由于只有实现类需要重新编译,因此在大型项目中使用PImpl模式可以显著减少整体的编译时间

0 人点赞