gpt4 book ai didi

c++ - 隐藏 C++ 库的私有(private)成员

转载 作者:可可西里 更新时间:2023-11-01 16:28:12 25 4
gpt4 key购买 nike

我写了一个库(不管它做什么),它显然有它的头文件。现在,我想隐藏那个头文件的私有(private)元素,所以如果我向某人提供我的库,他/她应该只能看到公共(public)成员(最好没有类定义,除了函数定义之外别无其他)。一种方法是创建 C 风格的头文件,它将包含某种“init”方法,用于创建实际库类的实例,用户必须将该对象的指针传递给每个函数做这份工作。

这是一个好的做法吗?

是否有任何其他公开接受的方式来做类似的事情?

提前致谢。

最佳答案

除了工厂模式(在我看来,它可能变得笨拙),您还可以将您的私有(private)成员隐藏在 PIMPL(指向实现的指针)后面:

// Interface.hpp
class Implementation;
class Interface {
public:
Interface() : pimpl(new Implementation()) {}
void publicMethod();
private:
std::unique_ptr<Implementation> pimpl;
};

// Interface.cpp
class Implementation {
public:
void PrivateMember();
};

void Interface::publicMethod() { pimpl->PrivateMember(); }

这具有隐藏实现的优点,代价是单个指针间接寻址,与典型的基于继承的工厂模式没有太大区别。

这也可以是 ABI 稳定的。对您的实现的更改不会影响链接,因为程序的其余部分永远不会看到任何更改。例如,在实现共享对象时,这是一个很好的模式。

这也是一个常见的 C++ 习语,因此其他 C++ 程序员会毫无疑问地认出它。

对于将遵循单例模式的类,您可以完全避免暴露 PIMPL,只需将整个实现写在您的 .cpp< 中的匿名 namespace 文件,您可以在其中放置任意多的状态和私有(private)函数,甚至无需在界面中提示。

关于c++ - 隐藏 C++ 库的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17554515/

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