Отфильтруйте синтезированный атрибут через std :: map в семантическом действии буст-духа

У меня есть случай, когда яЯ хотел бы отфильтровать значение, которое появляется как синтезированный атрибут внутри правила, через std :: map.

Карта предварительно сгенерирована и не будет изменяться во время анализа.Природа карты и реального синтаксического анализатора означает, что поиск никогда не должен завершиться ошибкой (хотя фактическое количество элементов может быть довольно большим)Обычный подход идеально подходит для этой проблемы (используйте таблицу символов)не подходит для реального случая. В реальной проблеме поиск является условным на основе атрибута, который выигралэто будет заметно намного позже при разборе (в несколько удаленном правиле).

Моя попытка:

#define BOOST_SPIRIT_USE_PHOENIX_V3
#include 
#include 
#include 
#include 
#include 
#include 
#include 

namespace qi = boost::spirit::qi;
namespace phx = boost::phoenix;

int main() {

    std::map myMap;
    myMap[1] = 100; myMap[2] = 200; myMap[3] = 300;

    std::string test = "1 2 3";
    std::vector results;

    qi::rule r
                      = qi::uint_ [qi::_val = phx::at(myMap, qi::_1)];

    qi::parse(test.begin(), test.end(), ( r % " " ), results);

    BOOST_FOREACH(unsigned int &x, results) {
        std::cout < x < "\n";
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос