Я знаю, як використовувати Boost.Python, щоб обернути клас C ++, піддаючи Python. Він дійсно потужний для використання Boost.Python, щоб зробити упаковку речей так зручно.
Однак, деякі деталі пояснюються про те, як відбувається Boost.Python тримайся клас С ++.
Код Boost.Python важко читати чи налагоджувати, тому що він написаний в моді програмування мета-програмування і все просто виконувати під час компіляції. Я сканував документацію та "Будівництво гібридних систем з Boost Python" статті авторів, але не знайшов відповіді.
Отже, як Boost.Python утримує C ++ клас?
Чи містить він обернений екземпляр класу C ++ як приватний член PyObject
? Чи всі функції успадкування, поліморфні тощо, що нагадують клас, імітуються шляхом делегування до утримуваної інстанції?
Відповіді:
0 для відповіді № 1Отже, як Boost.Python утримує C ++ клас?
Щоб бути педантичним, у C ++ немає класів під час виконання, тільки об'єкти або екземпляри класу.
Обгортки класу Boost утримують ваші об'єкти C ++ або за значенням, або за допомогою інтелектуального покажчика (в даний час лише застарілі std::auto_ptr
підтримується).
На жаль, документація boost.python відсутня, ось деякі корисні посилання для вас
- http://www.boost.org/doc/libs/1_57_0/libs/python/test/select_holder.cpp
- http://www.boost.org/doc/libs/1_57_0/libs/python/test/auto_ptr.cpp
- http://www.boost.org/doc/libs/1_57_0/libs/python/doc/v2/faq.html#ownership