我正在为C ++ 11编写一个JSON类,请参阅http://github.com/nlohmann/json。我的中心数据结构是一个包含JSON值类型(null,数组,对象,字符串,bool,数字)的类,它们通过一个漂亮的C ++和类似STL的接口提供它。可以通过模板参数设置值的类型,对于数组,默认为std::vector
,对象为std::map
,字符串为std::string
,布尔值为bool
,{{1} }表示整数,int64_t
表示浮点数。
为了支持AllocatorAwareContainer的概念,我还允许传递一个默认为double
的分配器类型。由于数组,对象和字符串类型与我的union中的指针一起存储,我使用此分配器为这些类型分配内存。
到目前为止,非常好(请参阅https://github.com/nlohmann/json/blob/master/src/json.hpp了解完整的源代码)...
现在我的问题是传递一个分配器是否有意义,然后该分配器隐式用于类型数组,对象和字符串。或者,我可以通过传递具有具体类型std::allocator
,std::map
和std::vector
的分配器来自定义分配器。然而,然而,我需要能够指定这个特化,因为目前,我的类使用以下模板定义:
std::string
问题是,template <
template<typename U, typename V, typename... Args> class ObjectType = std::map,
template<typename U, typename... Args> class ArrayType = std::vector,
class StringType = std::string,
class BooleanType = bool,
class NumberIntegerType = int64_t,
class NumberFloatType = double,
template<typename U> class AllocatorType = std::allocator
>
class basic_json
应该是ArrayType
,但具体类型std::vector<basic_json>
尚未定义。更糟糕的是,basic_json
应该是从ObjectType
到StringType
的映射。这里显示的代码(在这里完全找到https://github.com/nlohmann/json/blob/master/src/json.hpp)编译并且很好,但我不知道如何允许为每个类型而不是整个类指定一个分配器。
有什么想法吗?