有没有办法包装一个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中。
发布于 2016-04-22 01:51:07
下面的代码应该可以工作
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());
});发布于 2013-09-28 12:01:17
您可能正在尝试将一个值返回给一个新函数。例如:
def get_three():
value = 3
return value
def square(x):
square = x * x
return square
print square(get_three())
>> 9您不必临时设置get_three的值,如下所示:
three = get_three()
print square(three)你可以直接传入这个函数。
https://stackoverflow.com/questions/19062657
复制相似问题