Получается есть набор С++ классов под стать классам из *.ts файла.
На входе *.ts файл может менять. В нём могут быть данные классы в разной последовательности.
Суть программы — получая такой *.ts файл выводить такой же.
Сделать это через связывание уже готовых С++ классов.
struct MarketPolicy {};
struct LimitPolicy {
double price;
std::optional<double> stop;
};
Гарантируется что в *.ts файле могут быть только классы, которые уже подготовлены в С++ исполнение.
Алгоритм программы вкратце:
Комбинация ts классов -> выставление соответствия из уже готовых С++ файлов -> вывод.
В репе есть пример как это делать вручную.
А как автоматизировать?
Наверное:
1. Считать входной *.ts файл.
2. Выцепить названия классов
3. Поместить их в контейнер
4. Пройтись по контейнеру
5. получая очередное имя создавать биндинг, в котором еще в зависимости от имени проставляется тип:
Binder<MarketPolicy> binder("MarketPolicy");
Таким образом получим контейнер биндеров. Что с ними делать?
6. Поместить в некий ObjectRegistry
7. Вызвать метод render()
Не всё понятно. Не понятна наводка что за проставление свойств у такого биндинга, если вдруг у класса есть поля:
Binder<LimitPolicy> binder("LimitPolicy");
binder.set("price", &LimitPolicy::price);
binder.set("stop", &LimitPolicy::stop);
Смысл в том, что на входе(*.ts) мы получаем не объекты, а классы:
class MarketPolicy {
};
class LimitPolicy {
price: number;
stop?: number;
};
class Order {
symbol: string;
quantity: number;
isBuy: boolean;
policy: MarketPolicy | LimitPolicy;
};
class Balance {
free: number;
locked: number;
};