有没有一种方法可以包装使用移动语义而不复制对象的C++函数来返回对象(值不是指针或引用)?
例:
我有一个创建大对象A并使用其move构造函数返回它的函数:
class A {
public:
A( A&& );
};
A createA()
{
// creates A here
return std::move(A);
}
在C++中,可以通过将A“移出”函数来避免复制A。现在,我需要使用boost python在Python中包装A和createA。据我所知,当一个函数返回一个对象时,boost python会自动调用A的副本构造函数。如果我不为A提供副本构造函数,则编译将失败。我的问题是是否存在无需复制即可将对象“移动”到Python世界的方法。
最佳答案
下面的代码应该工作
struct A
{
A() = default;
A(A&&) = default;
};
A createA()
{
return {};
}
using bp = boost::python;
bp::class_<A, boost::noncopyable, std:: shared_ptr<A>> (
"A", "noncopyable class A", bp::no_init);
bp::def(
"createA",
+[]()
{
return std::make_shared<A> (createA());
});
关于c++ - 有没有一种方法可以使用move而不是copy语义在Python中包装函数返回值(对象)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19062657/