我有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'
感谢您的帮助!
答案 0 :(得分:2)
通常,如果要包装受保护的成员,则需要从使父成员公开的父级派生(包装)类。 (你可以简单地在using Base::ProtectedMember
部分说public
来公开它而不是包装它。然后你将正常包装它。像这样:
class MyWrapperClass : public MyClass {
public:
using MyClass::m_Foo;
};
在这个特定的例子中(实际上并没有完全烘焙),如果你想访问m_Foo,那么你需要包装ExtraClass。假设你有readwrite的问题可能是ExtraClass的实现(可能不提供运算符=你可以使用)。