我正在尝试绑定bool std::operator==(const std::string&, const std::string&)
,但我收到错误,希望有人可以帮助我。
std::string v1 = "foo";
std::string v2 = "foo";
bool r =
std::bind(
static_cast<bool(*)(const std::string&, const std::string&)>(&std::operator== ),
std::placeholders::_1,
std::cref(v1))(v2);
error: invalid static_cast from type '<unresolved overloaded function type>' to type 'bool (*)(const string&, const string&) {aka bool (*)(const std::basic_string<char>&, const std::basic_string<char>&)}'
&std::operator== ),
^
示例:ideone.com
答案 0 :(得分:3)
消除歧义std::operator==
解决了您的问题,但它并不是最干净的代码:
bool r =
std::bind(
static_cast<bool(*)(const std::string&, const std::string&)>(operator==<char, std::string::traits_type, std::string::allocator_type>),
std::placeholders::_1,
std::cref(v1))(v2);
答案 1 :(得分:2)
Pradhan为您提供了在此位置使用bind的正确语法。这似乎是很好的理由,不在这个地方使用bind
并且更喜欢lambda:
bool r = [&v1](const std::string& rhs){
return rhs == v1;
}(v2);