具有许多STL模板参数的类 - 使用一个或多个分配器?

时间:2015-06-24 21:39:42

标签: c++ templates stl containers allocator

我正在为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::allocatorstd::mapstd::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应该是从ObjectTypeStringType的映射。这里显示的代码(在这里完全找到https://github.com/nlohmann/json/blob/master/src/json.hpp)编译并且很好,但我不知道如何允许为每个类型而不是整个类指定一个分配器。

有什么想法吗?

0 个答案:

没有答案