C++ 使用boost::apply\u访问者时的变体移动语义
当我试图从另一个AST()构建一个AST时,我注意到在调用访问者时存在不必要的副本构造。但是,如果我们谈论C++11/C++1y,move结构应该在那里C++ 使用boost::apply\u访问者时的变体移动语义,c++,move-semantics,boost-variant,apply-visitor,C++,Move Semantics,Boost Variant,Apply Visitor,当我试图从另一个AST()构建一个AST时,我注意到在调用访问者时存在不必要的副本构造。但是,如果我们谈论C++11/C++1y,move结构应该在那里 创建正确支持通用引用的visitor/multivisitor版本是否存在无法克服的困难?否,没有无法克服的问题。Variant早在C++11之前就已经设计好了,因此不支持这种东西。我想,维护人员会喜欢一个补丁来添加支持(可能使用Boost.Move来提供C++03仿真)。@Mankarse我确信,添加这样的支持并不简单。当然,从头开始编写一个
创建正确支持通用引用的visitor/multivisitor版本是否存在无法克服的困难?否,没有无法克服的问题。Variant早在C++11之前就已经设计好了,因此不支持这种东西。我想,维护人员会喜欢一个补丁来添加支持(可能使用Boost.Move来提供C++03仿真)。@Mankarse我确信,添加这样的支持并不简单。当然,从头开始编写一个全新的variant类可能比添加对Boost.variant的支持要容易得多(同时保持与旧编译器的兼容性和对旧编译器的支持)。尽管如此,问题是在Boo.Apple的实现中,而不是C++中的一个变体类的概念,或者是由Boosi.Apple公开的高级接口。我发现了解决方法:使用静态访问器,如“代码>结构:A: Booo::StasyTeave:Value> {ReultTyType操作符()(INT&X){…= STD:::移动”(x) ;}};,即在函子签名中使用非常量引用参数。