C++中对函数赋值,怎么在 Python 实现?

2019-07-22 11:03:46 +08:00
 Huelse

最近在用 pybind11 绑定 c++中的一个库到 Python 中,遇到了一个问题

待绑定的类方法如下

class Ciphertext
{
public:
    inline auto &scale() noexcept
    {
        return scale_;
    }

    inline auto &scale() const noexcept
    {
        return scale_;
    }

    private:
        double scale_ = 1.0;
}

其例子中,有这样的调用:

Ciphertext x1_encrypted
x1_encrypted.scale() = pow(2.0, 40)

我是这样绑定的,可以成功访问到 scale 的值:

py::class_<Ciphertext>(m, "Ciphertext")
    .def("scale", (double &(Ciphertext::*)()) &Ciphertext::scale)

但是,显然不能这样在 python 中给它赋值,请问有什么方法?还是说,只能自己去增加 set 方法?

谢谢各位了!

2786 次点击
所在节点    Python
21 条回复
Huelse
2019-07-23 09:19:39 +08:00
@guiqiqi #19
```
py::class_<uIntVector>(m, "uIntVector")
.def("__getitem__", [](const uIntVector &v, int i) {
return v[i];
}, py::keep_alive<1, 2>());

```
我这样写可以索引取值了,但还不能赋值,也没考虑切片的情况

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585022

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX