Возвращение назад, когда я писал 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;
... который явно круговым.
Могу ли я сделать это без обертывания вещей в structs (который я могу переслать объявление) или без использования указателей (которые компилятор знает о размере)?
'struct X {X x; }; '- нет. –
Ваше отвращение к указателям - очень хорошее отношение к C++, но в этом конкретном случае немного раздуто. Я предполагаю, что реализация Delphi также решит эту проблему с указателями внутри. Если бы я был вами, я бы использовал решение, основанное на указателях (возможно, с 'std :: unique_ptr') и прекрасно переносило все в класс с полностью свободным от указаний интерфейсом. –