递归数据结构的前向声明
Forward declaration for recursive data structure
早在我写Delphi的时候,有一个TStringList
基本上是Delphi通用TObject
的字符串映射。使用此结构,我可以通过对其中一个字符串键放置另一个TStringList
来轻松创建递归的分层结构:
ParentStringList["somekey"] = "just a string value";
ParentStringList["anotherkey"] = SomeChildStringList;
问题是,我如何在C++中实现同样的事情?
我目前拥有的是:
typedef boost::variant< std::string, my_dictionary > my_variant;
typedef std::map < std::string, my_variant > my_dictionary;
。这显然是循环的。
我可以在不将内容包装在结构中(我可以转发声明)或不使用指针(编译器知道其大小)的情况下执行此操作吗?
Boost.Variant 文档涵盖了这种情况。如果不使用指针或其他类似的包装器,就无法做到这一点。
这种方法可以工作:
struct my_variant;
typedef map<string,my_variant> my_dict;
struct my_variant: variant<string, my_dict>
{};
不过,它有一些问题:
- 这需要允许未完全定义的模板参数的容器(
std::map
特别是)。使用 C++98,这是明确禁止的,我不确定这是否在后来的C++版本中被取消了。 - 从容器公开派生通常不是一个好主意,请自己研究其原因以及它们如何应用于您的程序。使用包含而不是派生将是一个更安全的替代方案,或者是私有派生的中间方式,但这会破坏这种方法提供的有用的 IS-A 关系。
尝试使用向量。我以前使用过它们作为程序内外部数据库的内部表示形式作为数据结构。
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 带参数的数据结构的全局声明
- 如何在构造时声明类对数据结构的哪个成员进行操作
- C++数据结构声明
- 全局声明的数据结构可以有多大
- 递归数据结构的前向声明
- 如何声明只能在特定上下文中使用的数据结构,c++