У меня есть приложение C++ с boost :: python bindings, которое позволяет пользователям получать доступ к различным классам и методам. До сих пор я определял методы и свойства, которые я хочу раскрывать вручную, используя методы.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).
Надеюсь, что я хорошо описал проблему, любая помощь будет очень признательна.
Большое спасибо.
Не в boost :: python. Swig делает довольно хорошую работу при автоматическом создании привязок, но я нахожу, что это больше накладных расходов. Boost :: python - это просто библиотека в конце дня. Вы получаете больше контроля, но вы должны выполнять всю работу самостоятельно.