绑定到std :: operator ==时未解决的重载函数错误

时间:2015-02-01 19:48:35

标签: c++

我正在尝试绑定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

2 个答案:

答案 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);