gpt4 book ai didi

c++ - Pimpl 带有包含类的 header

转载 作者:行者123 更新时间:2023-11-30 01:57:33 29 4
gpt4 key购买 nike

我遇到了一个将 pimpl 类作为 header 的实现,并将其包含在 pimpl 实现中。它甚至有意义吗?像这样:

用户界面.h

class UI {

public:

UI();
virtual ~UI();

// bunch of methods
private:

UIImpl* m_impl;
}

UIImpl.h

class UIImpl
{

public:

UIImpl( ...) ;
......
}

UIImpl.cpp

#include "UIImpl.h" 

UIImpl::UIImpl()

{

//Actual Implementation
...

}

我在想 PIMPL 的原因是将实现完全隐藏在 cpp 文件中。使用 header 是否会破坏目的?

最佳答案

它们是不同类型的 header 。 UI.h 是“公共(public)的”——它是库外部接口(interface)的一部分,供其客户端使用。

UIImpl.h 是“私有(private)的”,就像 UIImpl.cpp 一样。只要它从未包含在公共(public) header 中,它就可以保持对客户端不可见,就像 .cpp 本身一样。

impl 类定义拆分到头文件中可能有多种原因。或许还有一些其他的实现类被传递了UIImpl&参数。也许只在标题上运行 doxygen 更容易。也许这只是项目政策。

底线是,它仍然是 Pimpl,只要您不发布私有(private) header 。

关于c++ - Pimpl 带有包含类的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573944/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com