【发布时间】:2018-09-24 08:34:05
【问题描述】:
我有一个提供自定义静态比较器的类,std::sort 可以使用它。以下将编译得很好(精简为一个最小的代码示例):
#include <vector>
#include <string>
#include <algorithm>
class StringUtils
{
public:
static bool customStringCompare(const std::string&, const std::string&) { return true; }
};
void test()
{
std::vector<std::string> testList;
std::sort(testList.begin(), testList.end(), StringUtils::customStringCompare);
}
现在,当我向 StringUtils 类添加重载时,例如
static bool customStringCompare(const char*, const char*) { return true; }
以下方法可行:
void test2()
{
std::string s1, s2;
StringUtils::customStringCompare(s1, s2);
}
但是,上面的 std::sort 调用在 MSVC 2015 更新 2 中产生编译器错误 C2672(未找到匹配的重载)、C2780(预期 2 个参数 - 支持 3 个)、C2783(无法推断“_Pr”的模板参数) .
为什么std::sort在这种情况下找不到匹配的重载?
【问题讨论】:
-
您应该发布完整的错误消息,它说它无法推断模板参数(因为指向重载函数的指针不明确)。
-
@VTT 我更新了问题以包含所有三个错误代码。我没有发布完整的消息,因为它们是德语并且带有编译器的机器很遗憾没有连接到互联网。
标签: c++ visual-c++ stl overloading