2014-09-19 74 views
0

我有一個C++應用程序和boost :: python綁定,允許用戶訪問各種類和方法。到目前爲止,我一直在使用.def和.add_property方法定義要手動公開的方法和屬性。自動暴露boost python中的屬性

但是,我暴露給python的其中一個類是一個包含許多子類實現的基類。這些子類中的每一個都有一些我想暴露給python層的屬性。使事情更加複雜,每個屬性被模板上的特定類型,字符串,布爾,整數等

下面是一個例子:

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

不在boost :: python中。 Swig在自動生成綁定方面做得相當不錯,但我發現它的開銷更大。 Boost :: python只是一天結束時的一個庫。你有更多的控制權,但你必須自己完成所有的工作。

+0

我已經想出了一個機制來獲取我想要添加的所有屬性,但是因爲boost會自動從我的C++對象轉換爲我的python對象,所以我無法手動添加這些屬性。是否有任何方法來攔截你知道的這種轉換? – FlamFace 2014-09-23 08:20:41

+0

你在說什麼pyste?對不起,我不太熟悉它。當我正在做我的轉換項目時,我決定反對它。 – 2014-10-05 14:32:23