我有一个类方法,它返回一个指向内部数据结构的指针(其中数据结构保证在python代码中的使用寿命更长)。它看起来像:
class MyClass {
...
some_structure* get() {
return inner_structure_;
}
private:
some_structure* inner_structure_;
};
我想在Boost :: Python中包装这个get()
方法,这样如果这个类的两个不同对象返回相同的指针,python中相关的some_structure
对象就比较等了。
在class_<MyClass>
定义中,我尝试使用get()
和return_value_policy<reference_existing_object>()
调用策略包装return_inner_reference<>()
,但在这两种情况下,请在不同的情况下调用get()
python“MyClass”对象返回不同的some_structure
对象,即使它们都指向C ++中的相同内存地址。
我如何解决这个问题?包装器对象中可能有一个隐藏属性存储指针的地址,所以我可以比较它们吗?
答案 0 :(得分:2)
1)定义自己的比较指针的方法。
template <typename T>
bool eq(const T* self, const T* rhs) {
return self == rhs;
}
template <typename T>
bool ne(const T* self, const T* rhs) {
return !eq<T>(self, rhs);
}
2)手动声明包装类中的__eq__
和__ne__
指向这些方法:
class_<smth>("smth", no_init)
...
.def("__eq__", &eq<smth>)
.def("__ne__", &ne<smth>);