Синтезировать в умные указатели с Boost Spirit X3 - PullRequest
1 голос
/ 10 апреля 2020

Мне нужно проанализировать сложный AST, и было бы невозможно выделить этот AST в куче памяти, а узлы AST должны поддерживать полиморфизм. Одним из решений было бы выделить узлы AST с помощью интеллектуальных указателей.

Чтобы упростить вопрос, как бы я синтезировал следующую структуру (std::unique_ptr<GiantIntegerStruct> giantIntegerStruct), например, с Boost Spirit X3?

struct GiantIntegerStruct {
    std::vector<unique_ptr<int>> manyInts; 
}

Мое пробное решение, это использовать semanti c действия. Есть ли альтернатива?

1 Ответ

1 голос
/ 10 апреля 2020

Вы можете выполнять semanti c действия или определять черты для своих пользовательских типов. Однако, см. Здесь Semanti c Действия запускаются несколько раз в Boost :: Spirit Parsing (особенно две ссылки там) - в основном, не делайте этого.

Мне нужно для анализа сложного AST, и было бы невозможно выделить этот AST в куче памяти

Это несколько запутанное утверждение приводит меня к логическому выводу, что вам просто нужно выделить из сегмента общей памяти.

В старом добром духе Rule Of Zero вы можете создать упаковщик значений, который выполняет распределение, используя любой метод, который вы предпочитаете, и при этом наслаждаться автоматическим распространением атрибутов c с "семантикой значений". "(который будет служить" просто ручками "для реального объекта в разделяемой памяти).

Если вам нужна помощь в настройке этого параметра, не стесняйтесь отправлять новый вопрос.

...