我正在使用业力来生成大型结构的表示,但结构在生成期间被复制.我不认为他们需要,所以想知道如何避免它.
下面的快速示例打印"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)