gpt4 book ai didi

c++ - pimpl 类中的私有(private)成员?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:30 25 4
gpt4 key购买 nike

pimpl 习语中使用的实现类有任何私有(private)成员吗?我真正能想到的唯一原因是保护自己免受自己的伤害——即私有(private)成员用于在类和用户之间执行某种契约,在这种情况下,类和用户关系密切,所以它似乎没有必要。

最佳答案

我认为人们将 Pimpl 惯用法 与 Adapter/Bridge/Strategy 模式 混淆了。习语是特定于一种语言的。模式可以应用于多种语言。

Pimpl 惯用法旨在解决 C++ 中的以下问题:类的私有(private)成员在类声明中可见,这会向类的用户添加不必要的#include 依赖项。此习语也称为编译器防火墙

如果实现直接写在外部类对应的 *.cpp 文件中,并且在模块外部不可访问,那么我认为简单地为 Pimpl 类使用一个结构是完全可以的。为了进一步强化实现不意味着直接重用的想法,我将它们定义为私有(private)内部结构:

// foo.h
class Foo : boost::noncopyable
{
public:
...

private:
struct Impl;
boost::scoped_ptr<Impl> impl_;
};

// foo.cpp
struct Foo::Impl
{
// Impl method and member definitions
};

// Foo method definitions

一旦有了实现类的头文件,我想我们就不再谈论 Pimpl 惯用语了。我们更愿意谈论 Adapter、Bridge、Strategy、接口(interface)类等......

只是我的 2 美分。

关于c++ - pimpl 类中的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2178316/

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