问题描述
我得到了一个带有私有变量 locked_
的类。可以通过方法 bool& locked();
和 bool locked() const;
class Test {
bool& locked();
bool locked() const;
private:
bool locked_{true};
};
我不允许更改类 Test
,但我必须编写一个允许设置和检索 locked_
的 pybind11 接口。
我不能使用 .def_readwrite("locked",&Test::locked_);
,因为 locked_
当然是私有的。
我尝试使用
.def("locked",static_cast<bool& (Test::*)()>(&Test::locked),"locked",py::return_value_policy::reference_internal);
编译不过只是返回一个 bool 而不是对 bool 的某种可修改的引用。
如何在不“触及”原始 C++ 实现的情况下使锁定的读/写可访问。
解决方法
我仍然不知道 pybind,但我开始从你的问题中学习,我记得 def
接受 lambdas。您可以像这样包装对成员的调用:
auto locker = [](Test& t,bool lock) { t.locked() = lock; };
我不确定您是否需要做一些额外的事情来使 def
与您的自定义 Test
一起工作,所以我想它可以这样使用:
m.def("locker",locker);