C++ 内部/外部集管分离

C++ 内部/外部集管分离,c++,C++,我建了一个图书馆,布局如下: lib/ private_class_impl.cc private_class_decl.h public_class_impl.cc include/mylib/ public_class_decl.h 我的公共类需要有一个指向私有类的私有指针 有没有办法在不将private\u class\u decl.h移动到include/mylb/的情况下,将private\u class\u decl.h暴露到我的publ

我建了一个图书馆,布局如下:

lib/
   private_class_impl.cc
   private_class_decl.h
   public_class_impl.cc
include/mylib/
             public_class_decl.h
我的公共类需要有一个指向私有类的私有指针


有没有办法在不将
private\u class\u decl.h
移动到
include/mylb/
的情况下,将
private\u class\u decl.h
暴露到我的
public\u decl.h
声明中?

您可以在公共头中转发声明私有类(它不会暴露其接口或公共成员)

在公共场合 在公共场合 这个技巧之所以有效,是因为
public\u class
使用指向
private\u class
的指针,这是一个完整的类型,即使我们只提供了一个转发声明。不能按如下值使用
private\u class

struct private_class;
class public_class {
    private_class m_private;
    /* ... */
};

这将导致错误:
错误:字段'm_member'的类型'private_class'不完整。

您可以在

#include "public_class_decl.h"
#include "private_class_decl.h"

public_class::foo() {
    // private_class interface is known since we can include
    // "private_class_decl.h" here...
    m_private->method_of_private_class();
}
struct private_class;
class public_class {
    private_class m_private;
    /* ... */
};