C++ 重载标记为const的类成员函数

C++ 重载标记为const的类成员函数,c++,pybind11,C++,Pybind11,我在重载标记为const的类成员函数时遇到问题,而当函数未标记为const时则没有问题。此外,在纯C++中,过载本身也很好。 以下操作失败 #include <vector> #include <pybind11/pybind11.h> class Foo { public: Foo(){}; std::vector<double> bar(const std::vector<double> &a) const {

我在重载标记为
const
的类成员函数时遇到问题,而当函数未标记为
const
时则没有问题。此外,在纯C++中,过载本身也很好。 以下操作失败

#include <vector>
#include <pybind11/pybind11.h>


class Foo
{
public:
  Foo(){};

  std::vector<double> bar(const std::vector<double> &a) const
  {
    return a;
  }

  std::vector<int> bar(const std::vector<int> &a) const
  {
    return a;
  }
};


namespace py = pybind11;

PYBIND11_MODULE(example,m)
{
  py::class_<Foo>(m, "Foo")
    .def("bar", py::overload_cast<const std::vector<double>&>(&Foo::bar));
}
给出错误:

...  
no matching function for call to object of type 'const detail::overload_cast_impl<const vector<double, allocator<double> > &>'
    .def("bar", py::overload_cast<const std::vector<double>&>(&Foo::bar));
...
。。。
对“const detail::重载\u cast\u impl”类型对象的调用没有匹配函数
.def(“bar”,py::overload_cast(&Foo::bar));
...
然而,当我删除函数的
const
标记时,代码会起作用


如何执行此重载?

对于常量重载方法有一个特殊的标记

namespace py = pybind11;

PYBIND11_MODULE(example,m)
{
  py::class_<Foo>(m, "Foo")
    .def("bar", py::overload_cast<const std::vector<double>&>(&Foo::bar, py::const_));
}
名称空间py=pybind11;
PYBIND11_模块(示例,m)
{
py::类_Um(Foo)
.def(“bar”,py::overload_cast(&Foo::bar,py::const_));
}

常量重载方法有一个特殊的标记

namespace py = pybind11;

PYBIND11_MODULE(example,m)
{
  py::class_<Foo>(m, "Foo")
    .def("bar", py::overload_cast<const std::vector<double>&>(&Foo::bar, py::const_));
}
名称空间py=pybind11;
PYBIND11_模块(示例,m)
{
py::类_Um(Foo)
.def(“bar”,py::overload_cast(&Foo::bar,py::const_));
}
太棒了,谢谢!(几分钟后我会接受)太棒了,谢谢!(如果允许,我将在几分钟内接受)