是否可以限制对包含的 class 的访问?

Is it possible to have restricted access to included class?

我在 A.h 文件中有 class 说 A,在 B.h 文件中有 class B: public A

A.h 文件

#ifndef A_H
#define A_H

class A
{
  public:
    void foo {}
};

#endif

B.h 文件

#ifndef B_H
#define B_H
#include "A.h"

class B: public A
{
  ...
};

#endif 

有没有一种方法可以包含 B 但在我包含 A.h 之前无法访问 A

像这样

#include "B.h"

main() {
  B* b = new B(); //OK
  b->foo();       //OK
  A* a = new A(); //Error
  a->foo();       //Error  
}

没有。 B.h 取决于 A 的定义,因此如果不包含 A 的定义就无法包含 B.h。如果必须在 [=16] 中定义 B,则无法绕过该依赖关系=] 如果 B 必须继承 A.

您可以通过将 A 更改为抽象类型来使创建单独的 A 成为错误。但即使 A.h 单独包含在内,这仍然是一个错误。