template<class In, class Out> void copy(In from, In too_far, Out to)
{
*to = *from; //копируем элемент указуемый итератором
++to; // следующий выходной элемент
++from; //следующий входной элемент
}
char vc1[200];
char vc2[200];
void f1()
{
copy(&vc1[0], &vc1[200], &vc2[0]);
}
std::complex<double> ac[200];
void g(std::vector<std::complex<double>> &vc, std::list<std::complex<double>> &lc )
{
copy(&ac[0], &ac[200], lc.begin());
copy(lc.begin(), lc.end(), vc.begin())
}
Код взят из книги и отредактирован для использования со стандартными контейнерами, вместо собственных классов. Ошибка:
Severity Code Description Project File Line Suppression State
Error (active) E0308 more than one instance of function template "copy" matches the argument list: ClassesAndMore c:\Users\Dima\Documents\Visual Studio 2017\Projects\ClassesAndMore\ClassesAndMore\Template.h 73
Error (active) E0308 more than one instance of function template "copy" matches the argument list: ClassesAndMore c:\Users\Dima\Documents\Visual Studio 2017\Projects\ClassesAndMore\ClassesAndMore\Template.h 72
Со стандартной библиотекой работал очень мало.
Здесь срабатывает правило языка, называемое Argument Dependent Lookup (ADL) — поиск, зависимый от аргументов. Заключается оно в том, что при поиске функции рассматривается не только текущее пространство имён, но и пространство имён аргументов функции. В случаях когда типы аргументов находятся в std, т.е. для ac и lc, обнаруживается функция std::copy. Если нужно вызывать только вашу шаблонную функцию, можно явно указать глобальное пространство имен, т.е. вызывать так:
::copy(lc.begin(), lc.end(), vc.begin());
Еще должен сработать такой вариант:
(copy)(lc.begin(), lc.end(), vc.begin());
Функция copy перегруженна и компилятор не может выбрать какая реализация подходит лучше для аргументов передающихся в нее, ваша или copy из стандартной библиотеки. Решение – переименовать вашу copy, либо вовсе не перегружать ее.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости