我正在编写将SVG
转换为自定义结构以供进一步使用的应用程序。为了将SVG文件解析为C ++结构,我使用了nanosvg
库,该库以单个头文件(声明和实现)编写。#define NANOSVG_IMPLEMENTATION
启用实现,该功能允许编译器读取实现。
问题是,我想将此库包含在整个项目的多个文件中(具有各种结构,如路径,形状等),所以我只是#include <nanosvg/nanosvg.h>
,但这使其仅导入声明。但是定义NANOSVG_IMPLEMENTATION
会使它在整个项目中声明,因此现在每个#include <nanosvg/nanosvg.h>
都包括函数体,这会使编译器抛出很多错误。
我想将类分开,只是为了便于进一步修改(在项目树中查找文件名比F12
快得多-将所有内容放到底部,并想知道该文件是否确实包含该类),所以我尚未决定将所有内容都合并到一个文件中。
有什么方法可以限制#define的“作用范围”,以便每个文件都可以单独加载,也可以通过一种方式“一次全部加载”吗?
最佳答案
C ++(类似于C)使用单独的编译模型。每个翻译单元都是独立编译的,然后将结果链接在一起。实际上,每个.cpp文件及其所有标题都构成一个转换单元。
因此,在一个.cpp文件中需要一个#define NANOSVG_IMPLEMENTATION
。就这么简单。那可以很简单
#define NANOSVG_IMPLEMENTATION
#include <nanosvg/nanosvg.h>
而已。