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

Posted

技术标签:

【中文标题】如何在 C++ 中构建私有和公共 API(头文件)【英文标题】:How to structure private and public API in C++ (header files) 【发布时间】:2014-01-11 22:26:27 【问题描述】:

我目前正在开发一个 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

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

#include "LibName/FileName.h"

您认为组织 API 标头的最佳选择是什么?这两个之一或其他一些?

谢谢

【问题讨论】:

将实现放在 DLL 或库文件中,并让标头提供声明。 我明白了,您不想发送私人文件?那为什么不创建库,只将公共 api 写入一个头文件呢? 【参考方案1】:

我最终选择了如下结构:

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

.../src/LibName1/ClassImpl.h
.../src/LibName1/ClassImpl.cpp
.../src/LibName2/OtherClassImpl.h
.../src/LibName2/OtherClassImpl.h

这样我既可以分离公共头文件(包含目录)和私有源文件(src 目录),也可以引用包含指令中的头文件,而无需明确写出它们是公共的还是私有的:

#include "LibName1/Class.h"

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

【讨论】:

以上是关于如何在 C++ 中构建私有和公共 API(头文件)的主要内容,如果未能解决你的问题,请参考以下文章

如何在不涉及 Android 客户端应用程序的开发人员的情况下为某些网站构建公共/私有 API [关闭]

c++ 库的公共头文件中应该包含哪些内容?

我必须在类的头文件中提及私有方法吗?

在 C++ 中的类中初始化与公共和私有相同的函数:它是如何工作的?

打包静态库时如何隐藏标题?

避免在类头文件中声明私有函数 (C++)