Положение аннотации для последовательностей в Spirit X3

Что считается хорошей формой для добавления аннотаций позиций для правил, которые возвращают последовательности?

Предполагая, что у меня есть правило в моей грамматике вида:

const auto array_def = '[' >> *int_ >> ']';

который синтезирует атрибут типа std::vector< int >Я думал о добавлении аннотации положения посредством инкапсуляции векторной последовательности в готовый тип:

struct array_t { std::vector< int > value; };

и добавьте аннотацию положения согласно учебникам X3:

struct array_t : x3::position_tagged { std::vector< int > value; };

и т. д. К сожалению, это не работает, как объяснено в парсере Boost.Spirit X3 "нет именованного типа в (...)", где я вижу, что сворачивающиеся последовательности отдельных элементов были отклонены в Spirit.

Осталось, наверное, пойти по пути:

struct array_t : x3::position_tagged, std::vector< int > { };

который будет работать (на самом деле, работает), но это противоречит десятилетиям хорошей практики, которая говорит, что не наследуют std типы. Что такое хорошая форма X3 здесь?

0 ответов

Другие вопросы по тегам