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

隐藏私有数据成员?(C+;+;) 有没有办法在C++文件中隐藏C++类的私有数据成员远离它的用户?我认为私有成员是实现的一部分,在头文件中声明它们似乎有点倒退。,c++,class,private,C++,Class,Private,通常的处理方式是“pimpl”习惯用法 看 (为C++11更新) 实现此功能的经典方法是使用一个指向实现此功能的内部类的代理指针。没有办法在C++中做我知道的部分类定义。 < p>见< p>你想使用类似piml习惯用法< /p>之类的东西。 商业化?;) 您可以创建头文件,其中只声明公共和受保护的API 用户只会看到这些内容,这些内容可以包括在内。它们将代码链接到一个库,该库是使用完整的API和定义构建的 对于内联函数:确保它们在非内联代码中使用,那么库中将有一个可用的定义(但是,我不确定

通常的处理方式是“pimpl”习惯用法

  • (为C++11更新)

    • 实现此功能的经典方法是使用一个指向实现此功能的内部类的代理指针。没有办法在C++中做我知道的部分类定义。

      < p>见

      < p>你想使用类似piml习惯用法< /p>之类的东西。 商业化?;)

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

      用户只会看到这些内容,这些内容可以包括在内。它们将代码链接到一个库,该库是使用完整的API和定义构建的

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


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

      sheesh,在这里要快一点谢谢,它现在可以工作了。这两篇文章很好地解释了这个习惯用法。一般来说,这可能会对性能产生影响,因为无论何时访问私有内容,都会涉及指针解引用。但是,编译器可以对其进行优化,使其影响可以忽略不计。