如何在pybind11上绑定地图
how to make bind a map on pybind11
我正在为 cpp 中的加密进行回溯测试,但后端在 python 和 flask 上,我尝试使用 pybind11 以使 cpp 在后端工作,这是我的绑定代码
namespace py = pybind11;
PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
PYBIND11MODULE(backtester, m)
{
py::class<BT::Backtester>(m, "Backtester");
m.def(py::init<py::bind_map<std::map<std::string, double>>());
}
当我编译绑定时出现这个错误
会是什么?我该如何解决错误?提前致谢
py::bind_map
告诉 pybind11 绑定一个类型,它不会影响 py::init
得到的参数。这可能是您想要做的:
namespace py = pybind11;
PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
PYBIND11_MODULE(backtester, m)
{
py::bind_map<std::map<std::string, double>>(m, "StringDoubleMap");
py::class<BT::Backtester>(m, "Backtester");
m.def(py::init<std::map<std::string, double>>());
}
就像我在评论中所说的那样,您应该只包含 pybind11/stl.h
并让 pybind11 处理 dict/map 转换。
我正在为 cpp 中的加密进行回溯测试,但后端在 python 和 flask 上,我尝试使用 pybind11 以使 cpp 在后端工作,这是我的绑定代码
namespace py = pybind11;
PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
PYBIND11MODULE(backtester, m)
{
py::class<BT::Backtester>(m, "Backtester");
m.def(py::init<py::bind_map<std::map<std::string, double>>());
}
当我编译绑定时出现这个错误
会是什么?我该如何解决错误?提前致谢
py::bind_map
告诉 pybind11 绑定一个类型,它不会影响 py::init
得到的参数。这可能是您想要做的:
namespace py = pybind11;
PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
PYBIND11_MODULE(backtester, m)
{
py::bind_map<std::map<std::string, double>>(m, "StringDoubleMap");
py::class<BT::Backtester>(m, "Backtester");
m.def(py::init<std::map<std::string, double>>());
}
就像我在评论中所说的那样,您应该只包含 pybind11/stl.h
并让 pybind11 处理 dict/map 转换。