Я получаю очень похожий вопрос, как в: unexpected result iterating over a boost::python vector_indexing_suiteTypeError когда итерация подталкивание :: питона вектор
У меня есть следующий C++ код:
#include <vector>
#include <boost/python.hpp>
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
using namespace boost::python;
class Composite {
public:
std::string name;
std::vector<Composite*>& getChildren() {
return children;
};
std::vector<Composite*> children;
};
typedef std::vector<Composite*> CompositeArray;
BOOST_PYTHON_MODULE(coin)
{
class_<CompositeArray>("CompositeArray")
.def(vector_indexing_suite<CompositeArray, true>());
class_<Composite>("Composite", "Composite*", init<>())
.def("getChildren", &Composite::getChildren, return_internal_reference<>())
.def_readwrite("name", &Composite::name, "str")
;
}
И следующий код Python:
import coin
gna = coin.Composite()
gna.name = "test"
gna2 = coin.Composite()
gna2.name = "test2"
gna.getChildren().append(gna2)
for slip in gna.getChildren():
print(slip.name)
производит ошибку:
Traceback (most recent call last):
File "gna.py", line 34, in <module>
for prout in gna.getChildren():
TypeError: No to_python (by-value) converter found for C++ type: class Composite * __ptr64
Это работало отлично с Boost 1.59, но не с Boost 1.60.
Любая идея?
Edit: Я попытался обновив (см предложение ниже):
class_<Composite>("Composite", "Composite*", init<>())
к:
class_<Composite, Composite*>("Composite", "Composite*", init<>())
И я подтверждаю, что он работает с усилением 1,59, но не форсировать 1,60.
не работает с 1,55 либо. –
Когда я пишу «class_», я не получаю сообщение об ошибке ни с boost1.59, ни с boost1.60. Я скомпилировал boost с gcc-4.8.4 и python3.4. Возможно, что-то не так с вашей установкой или с вашей командой компиляции. Можете ли вы показать нам свою команду? –
cromod
Я использую Visual Studio 2013 и Python 3.3.5. Я попробую с новым Python. Вы все еще интересуетесь линией компиляции VS? – CanardMoussant