扩展受保护的函数boost :: python

时间:2012-12-27 16:38:44

标签: boost-python extending-classes

我有C ++代码(不是我的,所以它不可编辑)。问题在于扩展受保护的函数和类。

#include "ExtraClass.h"
...
MyClass::MyClass()
{
...
protected:
    bool Func{}
    ExtraClass m_Foo;
...
}

我需要在Python中访问m_Foo方法和受保护的函数,如Func(),如

from MyClass import  *
bar = MyClass()
bar.m_Foo.Run() //something like this

但有编译错误:     *错误:'ExtraClass MyApp :: m_Foo'受保护*

PS。如果我用public公开改变保护(只是为了尝试)。我只能以只读模式访问* m_Foo *:

class_<MyClass>("MyClass", init<>()) 
    .def_readonly("m_Foo", &MyClass::m_Foo)

更改为* def_readwrite *转到编译错误:

  

/boost_1_52_0/boost/python/data_members.hpp:64:11:错误:'中没有匹配'operator ='(((ExtraClass )c)+((sizetype)(( const boost :: python :: detail :: member <ExtraClass, MyClass&gt; *)this) - &gt; boost :: python :: detail :: member <ExtraClass, MyClass&gt; :: m_which))= d'

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

通常,如果要包装受保护的成员,则需要从使父成员公开的父级派生(包装)类。 (你可以简单地在using Base::ProtectedMember部分说public来公开它而不是包装它。然后你将正常包装它。像这样:

class MyWrapperClass : public MyClass {
  public:
    using MyClass::m_Foo;
};

在这个特定的例子中(实际上并没有完全烘焙),如果你想访问m_Foo,那么你需要包装ExtraClass。假设你有readwrite的问题可能是ExtraClass的实现(可能不提供运算符=你可以使用)。