我正在编写一个Python模块,其中我需要访问C++库。我使用Boost Python来将C++库中实现的功能公开给Python。在
我必须公开Boosi::变体& lt;BoL,无符号int,STD:::String,Boosi::asI::IP::地址,STD::vector & gt;从C++到python模块。在
我写了一个代码来实现这个功能,但是我有一个错误。如果有人能帮我解决这些问题,我将不胜感激。在
#include <boost/variant.hpp>
#include <boost/python/class.hpp>
#include <boost/python/def.hpp>
#include <boost/python/implicit.hpp>
#include <boost/python/init.hpp>
#include <boost/python/module.hpp>
#include <boost/python/object.hpp>
using myvariant = boost::variant<bool,int,std::string>;
struct variant_wrapper
{
struct variant_to_object : boost::static_visitor<PyObject *>
{
static result_type convert(myvariant const &v)
{
return apply_visitor(variant_to_object(), v);
}
template<typename T>
result_type operator()(T const &t) const
{
return boost::python::incref(boost::python::object(t).ptr());
}
};
myvariant variant_;
variant_wrapper ()
{}
variant_wrapper (myvariant& variant) : variant_(variant)
{}
void setAsBool(bool value)
{
variant_ = value;
}
void setAsString(const std::string& value)
{
variant_ = value;
}
boost::python::object getValue()
{
return variant_to_object::convert(variant_);
}
};
myvariant make_variant() { return myvariant(); }
BOOST_PYTHON_MODULE(pyintf) {
using namespace boost::python;
class_<variant_wrapper>("variant_wrapper", init<>())
.def("setAsBool",&variant_wrapper::setAsBool)
.def("setAsString",&variant_wrapper::setAsString)
.def("getValue", &variant_wrapper::getValue)
;
def("make_variant", make_variant);
to_python_converter<myvariant, variant_wrapper::variant_to_object>();
}
我有以下错误。我搜索了一下,但没有一个有效的解决办法。在
^{pr2}$
是一种在Python Boost中公开C++变体的方法,是:
包括
根据the Boost.Python manual使用
boost::python::handle<>()
,从PyObject*
(你的convert
函数返回的)构造一个boost::python::object
。当我用以下代码替换您的getValue()
函数时,它将编译:相关问题 更多 >
编程相关推荐