当我编写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;
......这显然是圆形的。
我可以不在结构中包装东西(我可以转发声明),或者不使用指针(编译器知道其大小)吗?
答案 0 :(得分:3)
Boost.Variant documentation涵盖了这个确切的案例。如果不使用指针或其他类似的包装器,就无法做到。
答案 1 :(得分:0)
这种方法可行:
struct my_variant;
typedef map<string,my_variant> my_dict;
struct my_variant: variant<string, my_dict>
{};
但是有一些问题:
std::map
),允许未完全定义的模板参数。使用C ++ 98,这是明确禁止的,我不确定这是否在以后的C ++版本中解除了。答案 2 :(得分:-2)
尝试使用vectors。之前我曾将它们用作程序中外部数据库的内部表示,作为数据结构。