Положение аннотации для последовательностей в 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 здесь?