如何在 C++ 中构建私有和公共 API(头文件)

cho*_*rch 4 c++ api directory-structure public header-files

我目前正在开发一个 API,现在我发现在我的目录树中进行显式拆分以分离公共头文件和私有头文件和源文件很有用。这样,为我的 SDK 构建公共包和开发(私有)包会更容易。我现在想到了两种不同的选择:

1)
.../LibName/Class.h
.../LibName/private/ClassImpl.h
.../LibName/private/LibName/ClassImpl.cpp

2)
.../public/LibName/Class.h
.../private/LibName/ClassImpl.h
.../private/LibName/ClassImpl.cpp
Run Code Online (Sandbox Code Playgroud)

至少对于公共文件,以“Libname/FileName”的方式组织文件会很好,因为这是我的代码中包含指令的方式:

#include "LibName/FileName.h"
Run Code Online (Sandbox Code Playgroud)

您认为组织 API 标头的最佳选择是什么?这两者之一还是其​​他?

谢谢

cho*_*rch 6

我最终选择了以下结构:

.../include/LibName1/Class.h
.../include/LibName2/OtherClas.h

.../src/LibName1/ClassImpl.h
.../src/LibName1/ClassImpl.cpp
.../src/LibName2/OtherClassImpl.h
.../src/LibName2/OtherClassImpl.h
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以将公共头文件(包含目录)和私有源文件(src 目录)分开,并且还可以引用包含指令中的头文件,而无需明确写入它们是公共的还是私有的:

#include "LibName1/Class.h"
Run Code Online (Sandbox Code Playgroud)

这种结构(或类似结构)也用于其他库,如 Qt 框架。