c++中一种数据封装的技巧

本文介绍了C++中pImpl机制,通过在类声明中隐藏Impl类,仅对外提供接口,实现了数据的隐藏和接口的封装。AsyncPipe类作为示例,展示了如何使用pImpl模式管理异步通信配置和回调功能。

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;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值