扩展受保护的功能Boost :: Python



我有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。如果我改变公众的保护(只是为了尝试)。我只能在可读模式下访问 * 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 ='in'in'((((extraclass )c) ((sizetype))无匹配const boost :: python ::详细::成员<ExtraClass, MyClass>*) -> boost :: python ::详细信息:: member <ExtraClass, MyClass> :: m_which))= d'

感谢您的任何帮助!

通常,如果要包装受保护的成员,则需要从父母中得出一个(包装)类,以使成员公开。(您可以简单地在public部分中说using Base::ProtectedMember即可公开它,而不是包装它)。然后,您将正常包装它。这样:

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

在此特定示例中(实际上不是完全烘焙的),如果要访问m_foo,则需要包装Extraplass。假设您对ReadWrite遇到问题可能是Extraclers的实现(可能无法提供操作员=您可以使用)。

相关内容

  • 没有找到相关文章

最新更新