我是boost python框架的新手。在互联网上关注一些示例代码之后,我遇到以下情况:我使用静态成员函数来创建类C对象的shared_ptr,并使用另一个静态函数来访问类C的对象的shared_ptr,精细。但是,在某些情况下,我需要boost :: any作为访问函数的参数,例如在代码中访问任何一个,然后我将检查boost :: any是否是必需的类型。在调用visitAny函数之前,我现在错过了将boost :: shared_ptr转换为boost :: any的转换函数,有人可以指出我应该在哪里以及如何实现转换函数。
提前谢谢。
class C {
public:
C() : member_(0) {};
static boost::shared_ptr<C> create();
static int visit(boost::shared_ptr<C>& c);
static int C::visitAny(boost::shared_ptr<boost::any>& c);
int member_;
};
boost::shared_ptr<C> C::create() {
return boost::shared_ptr<C>(new C());
}
int C::visit(boost::shared_ptr<C>& c) {
return c->member_;
}
int C::visitAny(boost::shared_ptr<boost::any>& c) {
if (c->type() == typeid(boost::shared_ptr<C>))
return boost::any_cast<boost::shared_ptr<C>>(c)->member_;
else
return 100;
}
BOOST_PYTHON_MODULE(boostPythonTest)
{
class_<C, boost::shared_ptr<C>, boost::noncopyable>("C", boost::python::no_init)
.def("create", &C::create)
.staticmethod("create")
.def("visit", &C::visit)
.staticmethod("visit")
.def("visitAny", &C::visitAny)
.staticmethod("visitAny");
}