我正在编写应用程序来转换 SVG
自定义结构以供进一步使用。为了将 SVG 文件解析为 C++ 结构,我使用了 nanosvg
库,写在单个头文件中(声明和实现)。
实现由 #define NANOSVG_IMPLEMENTATION
启用这使得编译器能够读取实现。
问题是,我想将这个库包含在跨项目的多个文件中(在路径、形状等各种结构中),所以我只是 #include <nanosvg/nanosvg.h>
,但这使得它只导入声明。但是定义 NANOSVG_IMPLEMENTATION
使其跨项目声明,所以现在每个#include <nanosvg/nanosvg.h>
还包括函数体,这会使编译器抛出很多错误。
我想把类分开,只是为了更容易进一步修改(在项目树中查找文件名比 F12
快得多 - 将所有内容都放在底部,并想知道该文件是否确实包含该类) ,所以我还没有决定将所有内容都合并到一个文件中。
有什么方法可以限制#define 的“影响范围”,这样每个文件都会单独加载,或者有什么方法可以“一次性”加载一次吗?
最佳答案
C++(和 C 一样)使用单独编译的模型。每个翻译单元都是独立编译的,然后将结果链接在一起。实际上,每个 .cpp 文件及其所有 header 构成一个翻译单元。
因此,您需要在一个 .cpp 文件中包含一个 #define NANOSVG_IMPLEMENTATION
。就这么简单。这可以很简单
#define NANOSVG_IMPLEMENTATION
#include <nanosvg/nanosvg.h>
仅此而已。
关于c++ - 在 C++ 中的多个文件中包含单个 header 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58232738/