c++ 中的pImpl 机制
在c++ 中我们看到有的在class 声明了一个class Impl,并且声明了这个类型的一个指针 Impl *impl = nullptr;
在cpp 文件中详细定义了这个Impl的类; 这种做法叫做piml 惯用法,它的主要作用是实现了对数据的隐藏。即当我们对外提供接口的时候,我们会以动态库和头文件的形式对外提供,我们只想通过头文件展示 我们对外提供的接口,其他的辅助接口以及数据都不需要对外展示,就可以通过这种方式实现。
class AsyncPipe
{
public:
AsyncPipe();
~AsyncPipe();
public:
using CallBack = std::function<void(const void*, size_t)>;
struct Config
{
size_t buff_size = 1024; //缓冲区的大小,默认1KB
size_t buff_min_num = 2; // 缓冲保留个数, 默认2
size_t buff_max_num = 10; // 缓冲最大个数 默认5
size_t interval = 1000; // 同步间隔 单位ms 默认1s
};
bool initialize(const Config &cfg); //初始化
void setCallBack(const CallBack &cb); //设置回调函数
void append(const void* data_ptr, size_t data_size); //异步写入
void cleanup(); //清理
//以上是需要对外展示的数据和接口
// Impl 是用于隐藏数据和操作方法的私有类
private:
class Impl;
Impl *impl_ = nullptr;
};
本文介绍了C++中pImpl机制,通过在类声明中隐藏Impl类,仅对外提供接口,实现了数据的隐藏和接口的封装。AsyncPipe类作为示例,展示了如何使用pImpl模式管理异步通信配置和回调功能。

1558

被折叠的 条评论
为什么被折叠?



