Я реализую алгоритм сортировки как личное обучение (без домашней работы!). У меня есть следующий код (за исключением импорта и т.д.):шаблон программирования: неоднозначный вызов перегруженной функции
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). По моему мнению, звонок не должен быть неоднозначным. Кроме того, при вызове второй функции сортировки параметры шаблона для первой функции сортировки не имеют никакого эффекта.
Что мне здесь не хватает? Почему компилятор считает второй вызов «неоднозначным»?
Попробуйте дать всю ошибку ... любая помощь с нашей стороны будет просто стрелять в темноте. – Puppy
Это может произойти, если у вас есть '' using namespace foo'' ('' std'' является очевидным виновником '' foo''), который уже имеет '' sort''. –
Интересно, что у меня нет '' 'использования пространства имен std''' в любом месте моего кода (я ненавижу загрязнение пространства имен). –