Автоматическое выставление свойств в Boost Python

0

У меня есть приложение 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

1 ответ

0

Не в boost :: python. Swig делает довольно хорошую работу при автоматическом создании привязок, но я нахожу, что это больше накладных расходов. Boost :: python - это просто библиотека в конце дня. Вы получаете больше контроля, но вы должны выполнять всю работу самостоятельно.

  • 0
    Я выяснил механизм получения всех атрибутов, которые я хочу добавить, но поскольку boost автоматически конвертирует мой объект c ++ в мой объект python, я не могу добавить атрибуты вручную. Есть ли способ перехватить это обращение, о котором вы знаете?
  • 0
    Вы говорите о писте? Извините, я не очень знаком с этим. Когда я делал свой конверсионный проект, я отказался от него.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню