语义演员的助推::精神::因果报应::发光

Semantic actor with boost::spirit::karma::lit

本文关键字:精神 因果报应 发光 语义      更新时间:2023-10-16

请帮我找到一个看似简单的问题的解决方案。我需要从容器生成一个字符串,格式为index=value。

例如:

seq={10,20,30}输出="1=10&2=20&3=30"

但我没有办法在没有写一个自定义生成器的情况下,用提升::精神::因果报应来做到这一点。由于某些原因,不可能将语义动作与因果报应一起使用: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>

已解决

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;
}