也许我想错了,因为我在C++之外的C#上花了这么多年时间,我有点生疏了。我忘了选择性链接有多好。
这真的是一个多部分的问题,我将从描述大局开始。
我正在为物联网设备等低内存环境构建JSON解析器和查询引擎。他们没有太多的代码空间,所以我希望最终开发人员只能包含他们打算使用的库的一部分。pull解析器是库的核心,所以这是给定的,但您可能不需要内存中的树。
目前,由于缺乏更好的方法,我在一个标头中定义了#define HTCW_JSONTREE。它由第二个标头拾取,第二个标题中包含一个函数,该函数取决于第一个标头中的代码。
#include "JsonTree.h" // optional
#include "JsonReader.h" // if JsonTree.h above is included
// extra functionality will be available from JsonReader
基本上,如果同时包含这两个头,那么返回内存中树的parseSubtree((函数将可用,但如果不包含JsonTree.h,则不可用。
首先,这是必要的吗?还是我可以无条件地包含所有功能,并期望parseSubtree((在从未使用过的情况下永远不会被链接进来?
第二,如果有必要的话,有什么更好的方法呢?现在,includes依赖于订单,代码散发着臭味。我想改变它。基本上,它现在就在那里,直到我找到更好的东西,因为如果我需要它,它比以后添加更容易删除。
提前谢谢。
以下是代码的更多内容:
从JsonTree.hpp经JsonTree.h:
#ifndef HTCW_JSONTREE_HPP
#define HTCW_JSONTREE_HPP
#define HTCW_JSONTREE
#include <cinttypes>
...
通过JsonReader.h:从JsonReader.hpp
#ifdef HTCW_JSONTREE
JsonElement* parseSubtree(mem::MemoryPool& pool,JsonParseFilter* pfilter = nullptr,mem::MemoryPool* pstringPool=nullptr,bool poolValues=false) {
...
#endif
JsonElement也来自JsonTree.h。parseSubtree是我在两个功能领域之间的集成点
首先,这是必要的吗
绝对不是。
或者我可以无条件地包含所有功能,并期望parseSubtree((在从未使用过的情况下永远不会被链接进来吗?
你完全可以。所有现存的图书馆从第一天起就是这样运作的。