как выставить метод, который выводит массив указателей от с ++ до python - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь предоставить доступ к методу класса, который выводит массив указателей от c ++ до python

Я знаю, как предоставить метод, который выводит указатель на родительский класс, используя return_value_policy и manage_new_object, например,

def("Tfactory", factory, return_value_policy<manage_new_object>() );

Это работает, т.е. если указатель указывает на дочерний класс, я получаю ребенка в python

Я также знать, как предоставить метод, который выводит вектор объектов, используя vector_indexing_suite, например

class_<std::vector<X> >("XVec").def(vector_indexing_suite<std::vector<X> >())

(я объявил X как Class_<X>(X).def(“foo”, &X.foo)). Однако я хочу вернуть массив указателей, указывающих на дочерние классы. Если я просто изменю строку выше на что-то вроде

class_<std::vector<X*> >("XVec").def(vector_indexing_suite<std::vector<X*> >())

Очевидно, я получаю сообщение об ошибке, поскольку для X * нет конвертера. Поэтому мой вопрос заключается в том, как мой класс_ (PtrX) должен быть создан для обеспечения правильной политики возврата (return_value_policy<manage_new_object>()), чтобы в Python можно было вызывать виртуальные методы X и запускать правильные дочерние методы). Любая помощь с благодарностью

Спасибо

...