Большое спасибо!!!!

я есть следующая диаграмма классов:

Там какой-то неиспользуемый класс, какBinaryOperator, но мой реальный код нуждается в них, поэтому я хочу сохранить их также в примере.

Я хочу использоватьповышение :: карму для того, чтобы получить представление JSON этого. JSON должен быть похож на следующий:

{
  "name": "Plus",
  "type": "Function",
  "arguments": [
    {
      "name": "IntegerValue",
      "type": "Value",
      "value": "4"
    },
    {
      "name": "Plus",
      "type": "Function",
      "arguments": [
        {
          "name": "IntegerValue",
          "type": "Value",
          "value": "5"
        },
        {
          "name": "IntegerValue",
          "type": "Value",
          "value": "6"
        }
      ]
    }
  ]
}

Поскольку это простой пример, я хотел бы использоватьBOOST_FUSION_ADAPT_ADT макрос для моих классов, чтобы модулировать генератор.

Я новичок в Карме, я прочитал учебник на сайте Boost, но я не понимаю, как атаковать мою проблему. Я не могу найти хороший учебник по этому макросу.

Я не хочу использовать существующие библиотеки для JSON, потому что сначала я хочу изучать карму, а во-вторых, JSON является лишь примером, мне нужно экспортировать свое выражение во многие форматы, и я могу сделать это, просто меняя генераторы, пока код, который используетBOOST_FUSION_ADAPT_ADT для моих занятий должно быть то же самое.

Вы можете найти код для создания примера выражения. С чего мне начать, чтобы решить мою проблему?

#include <boost/lexical_cast.hpp>
#include <iostream>
#include <vector>

class Expression {
public:

  virtual std::string getName() const = 0;
};

class Value : public Expression {
public:

  virtual std::string getValue() const = 0;
};

class IntegerValue : public Value {
public:

  IntegerValue(int value) : m_value(value) {}
  virtual std::string getName() const override { return "IntegerValue"; }
  virtual std::string getValue() const override { return boost::lexical_cast<std::string>(m_value); }

private:

  int m_value;
};

class Function : public Expression {
public:

  void addArgument(Expression* expression) { m_arguments.push_back(expression); }
  virtual std::string getName() const override { return m_name; }

protected:

  std::vector<Expression*> m_arguments;
  std::string m_name;
};

class Plus : public Function {
public:

  Plus() : Function() { m_name = "Plus"; }
};

///////////////////////////////////////////////////////////////////////////////

int main(int argc, char **argv) {

  // Build expression 4 + 5 + 6 as 4 + (5 + 6)
  Function* plus1 = new Plus();
  Function* plus2 = new Plus();
  Value* iv4   = new IntegerValue(4);
  Value* iv5   = new IntegerValue(5);
  Value* iv6   = new IntegerValue(6);
  plus2->addArgument(iv5);
  plus2->addArgument(iv6);
  plus1->addArgument(iv4);
  plus1->addArgument(plus2);

  // Generate json string here, but how?

  return 0;
}

Ответы на вопрос(2)

Ваш ответ на вопрос