Положение аннотации для последовательностей в Spirit X3 - PullRequest
0 голосов
/ 03 января 2019

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

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

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 здесь?

...