【问题标题】:What is the java "package private" equivalent in C++?C++ 中的 java“包私有”等价物是什么?
【发布时间】:2019-11-01 17:59:02
【问题描述】:

什么是 C++ 中的 java“包私有”等价物? 在提供 API 时,Java 包隐私功能(只有同一包中的类具有可见性)很有用。

C++ 是否有类似的功能(除了将其他类声明为“朋友”)? 详细说明, 例如假设 A.h 和 B.h 在同一个包中(即 API lib) 文件:A.h

class A
{
public :
void doA();

private : 
 int m_valueA;
};

文件:B.h

class B
{
public : 
void doB()

private:
int m_valueB;

}

我想要的是,

公开可见性:仅 A::doA() 和 B::doB()

在包内(即 API 库):A 应该能够访问 B::m_valueB,B 应该能够访问 A::m_valueA。 不让彼此成为“朋友”课程。

【问题讨论】:

  • 不,没有。
  • 我不熟悉 Java。您能否简要解释一下“Package Private”的作用,或者解释太长,对非 Java 程序员没有意义?

标签: c++ access-modifiers


【解决方案1】:

c++ 没有 java 中的包。但它确实有命名空间,但命名空间就是这样,namespace。所以它是一种不同的野兽。

在某些情况下,某种模拟可能是内部类(其他类中的类)——因为内部类被视为成员。

除此之外,还有头文件和实现(.cpp 文件)——从这个意义上说,你有控制实际可见内容的单元或模块(不仅是私有的,而且完全隐藏——特别是如果放入 anon。 namespace)。这个概念涵盖了单个 .h 文件和 .cpp 文件或更像一个完整包的整个项目/libs/dll(并且可以通过在各自的头文件中“显示”的内容来选择它们公开的 API 的哪些部分) .

【讨论】:

  • @darune,谢谢。但是“匿名名称空间”仅适用于单个文件,对吗?那么如何才能实现“......或更像一个完整包的整个项目/libs/dlls”?
  • @aKumara 大多数传统库都会有一些内部部分(一些仅标头库将内部内容放在“*_impl.hpp”文件中的“私有”或“内部”子命名空间中 - 但是没有编译器强制机制以防止其使用)
猜你喜欢
  • 2010-12-07
  • 2010-11-22
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多