boost python boost:shared_ptr to boost :: any convertible

时间:2015-01-19 14:00:01

标签: python c++ boost type-conversion

我是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");

}

0 个答案:

没有答案