C++ Pimpl手法代码实现

pimpl 惯例是一种新式 C++ 技术,用于隐藏实现、最小化耦合和分离接口。

pimpl 惯例如何改进软件开发生命周期:

  • 最大程度地减少编译依赖项。
  • 接口和实现分离。
  • 可移植性。

关于更多的pimpl手法就不做过多解释了,这里主要是如何实现,Pimpl实现有两种方式

第一种

通过类前置声明

// config.h
class ConfigPrivate;
class Config
{
private:
    Config();

public:
    ~Config();
    static Config& Instance()
    {
        static Config c;
        return c;
    }

private:
    std::unique_ptr<ConfigPrivate> pimpl;
};

注意,这里将Config声明为友元,目的为了让pimpl指针可以访问到ConfigPrivate是private私有成员。

//config.cpp
class ConfigPrivate{
public:
    
private:
    friend Config;//声明为友元

};

Config::Config():pimpl(std::make_unique<ConfigPrivate>())
{
    
}

Qt使用的q,d指针方式也是这样实现的。

第二种

这种方式对于初学者可能不太容易理解。

// my_class.h
class my_class {
	my_class();
 private:
	class impl;
	std::unique_ptr<impl> pimpl;
};
// my_class.cpp
class my_class::impl {
    friend my_class;
};
my_class::my_class(): pimpl( std::make_unique<impl>() )
{
	
}

用于编译时封装的 Pimpl(现代 C++)

猜你喜欢

转载自blog.csdn.net/no_say_you_know/article/details/125277832