我正试图为我的一个项目实现一个复杂的结构,但我不知道如何进行。
这个结构本身是一棵树,其中每个节点都有一个字符串id,并且是一棵树或者是支持的数据类型之一的容器,有点像json数据。
tree: {
value1: 4,
value2: {
value3: 40.2f,
}
}
现在,我设法用C语言做了一些工作,但我想学习更多关于C++和模板的知识,所以我尝试着在这里做一些更干净的事情。我可以使用非常强大的 nlohmann json 并希望实现类似的东西,但我不会学到任何东西。
我最大的问题是如何处理端点有多种类型的事实。我在项目中就有这个想法。
template<class T>
class basic_node {
private:
std::string id;
std::map<const std::string&, T> contents;
};
但树的定义会带来几个问题: T
和树的高度一样,是重复的,而且只能容纳一个单一的数据类型。
现在在代码中挖掘,我发现了这个。
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 = std::int64_t,
class NumberUnsignedType = std::uint64_t,
class NumberFloatType = double,
template<typename U> class AllocatorType = std::allocator,
template<typename T, typename SFINAE = void> class JSONSerializer =
adl_serializer>
class basic_json;
我需要这样的东西来允许多类型树吗?
我找了一会儿,找到了一个解决方案。我想避免 C
尽可能多,但最后,什么是?C++
不过 C
与一堆东西 ?
评论是正确的,使用 std::variant
或联合是最好的方法,不要害怕使用指向下一个节点的指针。
此外,还有一堆东西可以用开关壳和返回值的值类型来做。