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;
/* ... */
};