我有一个 C++ 函数,它需要一个vector< pair< pair<string,string>, string > >
我希望从 python 调用的函数。
我写了一个包装如下:
bool create_cache_wrapper(boost::python::tuple tup_)
{
vector< pair< pair<string,string>, string > > rbv;
for(int i=0;i<py::len(tup_);++i)
{
std::string start,end,bucket;
bucket = py::extract<std::string>(tup_[i][1]);
start = py::extract<std::string>(tup_[i][0][0]);
end = py::extract<std::string>(tup_[i][0][1]);
rbv.push_back(make_pair(make_pair(start,end),bucket));
}
return create_cache(rbv);
}
我已经用python注册了这个函数,如下所示:
BOOST_PYTHON_MODULE(my_lib)
{
using namespace boost::python;
def("create_cache", create_cache_wrapper);
}
这很好用,但问题是,它只接受一个元组而不接受一个列表。如何编写包装器以使其适用于 python 中的任何序列容器?有没有更好的方法来做到这一点而无需编写包装器?我希望 python api 像
create_cache( ( (('',''),'b1'), ) )
create_cache( [ (('',''),'b1') ] )