У меня есть метод в python, который реализован следующим образом:
class MyClass:
def __init__(self, i, j, k):
self._i = i
self._j = j
self._k = k
def generate_queue(self, max, min):
# do stuff
return queue_with_ints
class Class2:
def __init__(self, mc):
# mc is a MyClass object
self._mc = mc
код C++ (я использовал список, потому что я не нашел никакой документации о boost::python::queue, и я всегда могу заставить функцию python возвращать список вместо этого, поскольку это не имело бы большого значения):
class Foo : public Node{
// constructor
// other functions
void do_stuff_with_queue( int max, int min){
// o is an instance of Class2
boost::python::object mc = (this->o).attr("_mc");
boost::python::list q = mc.attr("generate_queue")(max, min);
int length = extract<int>(q.attr("__len__")());
for (int i = 0; i < length; i++){
int subframe = boost::python::extract<int>(q[i]);
// do stuff
}
}
вывод ошибки:
erreur: conversion from ‘boost::python::detail::dependent<boost::python::api::object, int>::type {aka boost::python::api::object}’ to non-scalar type ‘boost::python::list’ requested
Я не уверен, что здесь происходит, единственная другая ошибка нескалярного типа, которую я видел, - это когда кто-то пытался назначить указатель на объект из это сообщение. Как я могу это исправить?
Спасибо
boost::python::queue
, так как Queue — это не встроенный, а обычный класс Python. Просто сохраните его вboost::python::object
и используйтеattr
точно так же, как и с экземпляромMyClass
. - person Dan Mašek   schedule 09.07.2020boost::python::list q = boost::python::extract<boost::python::list>(mc.attr("generate_queue")(max, min));
Изменить: формат - person qwerty_99   schedule 09.07.2020