小编ald*_*ous的帖子

使用karma生成器避免属性副本

我正在使用业力来生成大型结构的表示,但结构在生成期间被复制.我不认为他们需要,所以想知道如何避免它.

下面的快速示例打印"Copy!",因为目标结构被复制到rule::generate:

namespace karma = spirit::karma;
namespace phoenix = boost::phoenix;

struct foo
{
    foo() { }
    foo( foo const &other ) { std::cout << "Copy!"; }
    int f() const { return 42; }
};

std::string output;
typedef std::back_insert_iterator< std::string > iterator;
karma::rule< iterator, foo() > foo_rule = 
    karma::int_[ karma::_1 = phoenix::bind( &foo::f, karma::_val ) ];
foo my_foo;
iterator it( output );
karma::generate( it, foo_rule, my_foo );
Run Code Online (Sandbox Code Playgroud)

我可以foo_rule通过引用声明属性来停止复制:

karma::rule< iterator, foo &() > …
Run Code Online (Sandbox Code Playgroud)

c++ boost-spirit boost-spirit-karma

6
推荐指数
1
解决办法
526
查看次数

标签 统计

boost-spirit ×1

boost-spirit-karma ×1

c++ ×1