我有一個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對象)。
我希望我已經描述了這個問題,任何幫助將不勝感激。
非常感謝。
我已經想出了一個機制來獲取我想要添加的所有屬性,但是因爲boost會自動從我的C++對象轉換爲我的python對象,所以我無法手動添加這些屬性。是否有任何方法來攔截你知道的這種轉換? – FlamFace 2014-09-23 08:20:41
你在說什麼pyste?對不起,我不太熟悉它。當我正在做我的轉換項目時,我決定反對它。 – 2014-10-05 14:32:23