【发布时间】:2015-05-17 13:47:24
【问题描述】:
在我写 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;
...这显然是圆形的。
我可以在不将内容包装在结构中(我可以转发声明)或不使用指针(编译器知道其大小)的情况下做到这一点吗?
【问题讨论】:
-
struct X { X x; };-- 没有。 -
您对指针的厌恶在 C++ 中是一种非常好的态度,但在这种特殊情况下有点夸大其词。我猜 Delphi 实现也会在内部用指针解决这个问题。如果我是你,我会使用基于指针的解决方案(可能使用
std::unique_ptr)并将所有内容都很好地包装在一个具有完全无指针接口的类中。
标签: c++ recursion data-structures