我有一个带有boost :: python绑定的C ++应用程序,允许用户访问各种类和方法。到目前为止,我一直在使用.def和.add_property方法定义我想要手动公开的方法和属性。
但是,我向python公开的类之一是具有许多子类实现的基类。这些子类中的每一个都有许多我希望暴露给python层的属性。为了使事情变得更复杂,每个属性都是在特定类型,字符串,bool,int等上进行模板化的。
以下是一个例子:
class Base {
public:
Base();
static const std::string readableType();
virtual void registration();
}
class Subclass1 : public Base {
public:
Subclass1();
static const std::string readableType();
virtual void registration();
protected:
private:
Core::Parameter<unsigned> m_seed;
Core::Parameter<float> m_minVel, m_maxVel;
Core::Parameter<bool> m_activated;
}
class Subclass2 : public Base {
public:
Subclass2();
static const std::string readableType();
virtual void registration();
protected:
private:
Core::Parameter<int> m_id;
Core::Parameter<Core::Types::vec3> m_velVector;
}
Core::Parameter
类只是一个模板化对象,它包含该类型的数据,但是有两个子类要经过它们并手动添加,然后添加所有特定参数。有没有办法自动解释这些属性,将它们作为可访问的参数添加到python对象上,还将类型映射到python中的正确类型? (其中一些必须是我自己的python对象,即vec3对象)。
我希望我已经很好地描述了这个问题,非常感谢任何帮助。
非常感谢。
答案 0 :(得分:0)
不在boost :: python中。 Swig在自动生成绑定方面做得非常好,但我发现它的开销更大。 Boost :: python在一天结束时只是一个库。你可以获得更多控制权,但你必须自己完成所有工作。