1
как расширение моего вопроса и answer from sehe Я хочу вызвать функцию при генерации моего вывода.Ускорить метод объекта Karma
Я добавил метод bool isRoby()
и изменил правило emp.
#include <boost/fusion/adapted.hpp>
#include <boost/spirit/include/karma.hpp>
#include <boost/spirit/include/phoenix.hpp>
#include <map>
namespace karma = boost::spirit::karma;
namespace phx = boost::phoenix;
enum TYPEX { AUTHOR1, AUTHOR2, AUTHOR3, AUTHOR4 };
std::map<TYPEX, std::string> author2name;
struct Emp {
std::string name;
TYPEX author;
bool isRoby()
{
return name == "roby";
};
};
BOOST_FUSION_ADAPT_STRUCT(Emp, name, author) // boost 1_59
//BOOST_FUSION_ADAPT_STRUCT(Emp, (std::string, name)(std::string, author)) // older boost
int main() {
using it = boost::spirit::ostream_iterator;
karma::rule<it, std::string()> quote;
karma::rule<it, TYPEX()> author;
karma::rule<it, Emp()> emp;
{
using namespace karma;
quote %= '"' << string << '"';
author = quote [ _1 = phx::ref(author2name)[ _val ] ];
emp %= delimit('\t')[ quote << author << bool_[ BIND? ] ];
}
Emp x { "one", AUTHOR2 };
author2name[AUTHOR2] = "TWO!";
std::cout << karma::format(emp, x);
}
Я только что нашел Phoenix Lazy, но, похоже, не соответствует.