我正在实现排序算法作为个人训练(没有作业!)。
我有以下代码(不包括导入等):
template<class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp)
{
/* actual sorting code is here */
}
template<class RandomIt>
void sort(RandomIt first, RandomIt last)
{
std::function<bool(decltype(*first), decltype(*last))> comp = [](decltype(*first) a, decltype(*last) b)
{
return a < b;
};
sort (first, last, comp);
}
尝试使用测试数组调用此代码
auto test_array_1 = std::make_unique <std::array < uint64_t,SORTING_TEST_LENGTH >> ();
std::copy(std::cbegin(*template_array), std::cend(*template_array), std::begin(*test_array_1));
sort(std::begin(*test_array_1), std::end(*test_array_1));
编译器抱怨“对重载函数的不明确调用”(VC++ C2668)。根据我的理解,这个调用不应该是含糊的。另外,在第二个排序函数中调用第一个排序函数的模板参数也没有任何效果。
我在这里缺少什么?为什么编译器认为第二个调用“不明确”?