gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:35:07 26 4
gpt4 key购买 nike

我在重载标记为 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));
}

编译使用:

clang++ -O3 -shared -std=c++14 `python3-config --cflags --ldflags --libs` example.cpp -o example.so -fPIC

给出错误:

...  
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 标记时,代码可以正常工作。

我应该如何执行此重载?

最佳答案

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_));
}

关于c++ - 重载标记为 const 的类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49652710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com