c++ - 如何绑定(bind)到 vector<>::at?

标签 c++ functor

在 Visual C++ 2013 中,以下代码给我一个“模棱两可的调用”编译错误:

typedef vector<int> V;
V v;
auto b1 = bind(&V::at, &v);

现在我四处搜索,发现我应该转换到我想要的签名。所以我这样做:

auto b2 = bind(static_cast<int(V::*)(V::size_type)>(&V::at), &v);

现在,错误是:

'static_cast' : cannot convert from 'overloaded-function' to 'int (__thiscall std::vector<_Ty>::* )(unsigned int)'

我怎样才能正确地做到这一点?

最佳答案

V::at 的返回类型是V::reference:

auto b = std::bind(static_cast<V::reference (V::*)(V::size_type)>(&V::at), v);

不用说,这是一种可憎的行为。

关于c++ - 如何绑定(bind)到 vector<>::at?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21337618/

相关文章:

c++ - 如何在使用算法保持原始排序的同时从未排序的 std::vector 中删除重复项?

c++ - 如何用 C++ 编写一个简单的类?

haskell - 为什么 "fmap (replicate 3) Just"的类型为 "a -> [Maybe a]",在 Haskell 中

haskell - 是什么让 fmap 在没有显式方法声明的情况下在这里工作?

c++ - 在 C++ 中流式传输二进制文件

C++ 如何使用从一个函数到另一个函数的变量?

c++ - Boost MultiIndex Container 如何使用不同的组合键进行搜索?

javascript - JavaScript Array.map 通常是一个 endofunctor 还是只是一个仿函数?

java - 让Java函数对象封装泛型函数的正确方法

c++ - 传递将模板参数作为参数默认为 NULL 的 boost::function