在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)'
我该如何正确地做到这一点?
答案 0 :(得分:5)
V::at
的返回类型为V::reference
:
auto b = std::bind(static_cast<V::reference (V::*)(V::size_type)>(&V::at), v);
毋庸置疑,这是一种憎恶。
答案 1 :(得分:1)
如果您不需要使用bind
,则可以使用std::function
:
std::function<int&(int)> b1 = [&v](int index){return v.at(index);}