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