在boost python中自动公开属性

时间:2014-09-19 09:55:12

标签: python c++ boost-python

我有一个带有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对象)。

我希望我已经很好地描述了这个问题,非常感谢任何帮助。

非常感谢。

1 个答案:

答案 0 :(得分:0)

不在boost :: python中。 Swig在自动生成绑定方面做得非常好,但我发现它的开销更大。 Boost :: python在一天结束时只是一个库。你可以获得更多控制权,但你必须自己完成所有工作。