44

有没有办法在 cpp 文件中向用户隐藏 C++ 类的私有数据成员?我认为私有成员是实现的一部分,在头文件中声明它们似乎有点倒退。

4

5 回答 5

64

“pimpl”成语是通常如何处理的。

于 2008-10-15T20:23:48.247 回答
11

你想使用像 PIMPL 成语这样的东西

http://en.wikipedia.org/wiki/Opaque_pointer

于 2008-10-15T20:28:06.847 回答
8

Pimpl 成语

于 2008-10-15T20:24:10.850 回答
4

执行此操作的经典方法是使用指向实现该功能的内部类的代理指针。据我所知,没有办法在 C++ 中进行部分类定义。

于 2008-10-15T20:23:57.463 回答
1

去商业化?;)

您可以创建头文件,在其中您只声明公共和受保护的 API。

用户只看到这些,他们可以包括在内。他们将代码与您使用完整 API 和定义构建的库链接。

对于内联函数:确保它们在非内联代码中使用,然后库中会有一个可用的定义(但是我不确定它是否会在用户实现中内联)。

对于模板化代码,没有真正的解决方法。一种半心半意的解决方案是编写代码,它使用具有不同对象类型的模板化代码。用户将仅限于这些,因为它们是您的库中唯一可用的定义。

于 2010-01-25T17:57:34.090 回答