gpt4 book ai didi

c++ - 有没有办法使用 move 而不是复制语义在 Python 中包装函数返回值(对象)?

转载 作者:行者123 更新时间:2023-11-30 02:52:21 25 4
gpt4 key购买 nike

有没有一种方法可以在不复制对象的情况下使用 move 语义包装返回对象(值而不是指针或引用)的 C++ 函数?

例子:

我有一个创建大对象 A 并使用其 move 构造函数返回它的函数:

class A {
public:
A( A&& );
};

A createA()
{
// creates A here
return std::move(A);
}

在 C++ 中,我可以通过将 A 移出函数来避免复制它。现在,我需要使用 boost python 在 Python 中包装 A 和 createA。据我所知,当一个函数返回一个对象时,boost python 会自动调用 A 的复制构造函数。如果我不为 A 提供复制构造函数,编译将失败。我的问题是是否有办法在不复制的情况下将对象“move ”到 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 而不是复制语义在 Python 中包装函数返回值(对象)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com