Что считается хорошей формой для добавления аннотаций позиций для правил, которые возвращают последовательности?
Предполагая, что в моей грамматике есть правило вида:
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 "нет именованного типа в (...)" , где я вижу, что сворачивающиеся последовательности отдельных элементов были отклонены в Дух.
Осталось только пойти по маршруту:
struct array_t : x3::position_tagged, std::vector< int > { };
, который будет работать (на самом деле, работает), но это противоречит десятилетиям хорошей практики, которая говорит, что не наследуют std
типов. Что такое хорошая форма X3 здесь?