【发布时间】:2018-08-18 02:57:20
【问题描述】:
我想用 PyBind11 绑定一个 C++ 函数。问题是这个函数有一个带双指针的参数,编译器会报错
error: cannot initialize a parameter of type 'char **' with an rvalue of type 'typename make_caster<char **>::cast_op_type<typename std::add_rvalue_reference<char**>::type>' (aka 'char *').
具体代码如下:
#include <pybind11/pybind11.h>
#include <iostream>
namespace py = pybind11;
void parse_args(int argn__, char** argv__)
{
for(int i = 1; i < argn__; ++i)
{
std::cout<< argv__[i];
}
}
PYBIND11_MODULE(argv_bind, m) {
m.def("parse_args", &parse_args);
}
【问题讨论】:
-
可能pybind11无法判断什么python类相当于双指针。 python 代码如何提供指向 c++ 扩展的双指针? python 端可以改为给出一个 numpy 数组或 python 列表,它们在 c++ 端被转换为
py::array、Eigen 数组或std::list。顺便说一句,python 的sys.argv和argparse已经可以解析命令行参数了。您可以使用这些并将结果通过bool、std::string、int等传递给 c++ 扩展。由于解析命令行参数不是性能关键,python 可以做到这一点。