请帮我找一个看似简单问题的解决方案。我需要从一个容器中以index = value的形式生成一个字符串。
例如:
seq = {10,20,30} output =“1 = 10& 2 = 20& 3 = 30”
但是我发现没有办法使用boost :: spirit :: karma而不编写自定义gererator。由于某些原因,使用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>
答案 0 :(得分: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;
}