Большое спасибо!!!!
я есть следующая диаграмма классов:
Там какой-то неиспользуемый класс, как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;
}