Семантический актер с boost::spirit::karma::lit

Помогите пожалуйста найти решение вроде бы простой проблемы. Мне нужно сгенерировать строку из контейнера в форме index=value.

Например:

seq = {10, 20, 30} вывод = "1=10&2=20&3=30"

Но я не нашел способа сделать это с boost::spirit::karma без написания собственного генератора. По некоторым причинам невозможно использовать семантическое действие с karma::lit. Может я что-то пропустил?

void index(std::string &string_)
{
    static size_t index_ = 1;
    string_ = boost::lexical_cast < std::string > (index_++);
}

int main()
{
    using boost::spirit::karma::uint_;
    using boost::spirit::karma::generate;
    using boost::spirit::karma::lit;

    std::string string_;

    boost::array < unsigned int, 4 > array_ = { 1, 2, 3, 5 };

    generate(
            std::back_insert_iterator < std::string > (string_), 
            (lit("")[&index] << "=" << uint_) % '&',
            array_);

    return 0;
}

При компиляции получаю следующую ошибку:

cannot convert parameter 1 from 'boost::spirit::karma::transform_attribute<boost::spirit::unused_type,boost::spirit::unused_type>::type' to 'std::basic_string<_Elem,_Traits,_Ax>

person sliser    schedule 01.03.2012    source источник


Ответы (1)


Решено

int main()
{
using boost::spirit::karma::uint_;
using boost::spirit::karma::generate;
using boost::spirit::karma::lit;

using boost::phoenix::val;
using boost::phoenix::ref;

std::string string_;

boost::array < unsigned int, 4 > array_ = { 1, 2, 3, 5 };

unsigned int count_ = 1;

generate(
    std::back_insert_iterator < std::string > (string_), 
    (lit(val(ref(count_)++)) << "=" << uint_) % '&',
    array_);

return 0;
}
person sliser    schedule 02.03.2012