Есть ли способ гарантировать, что аргумент шаблона, переданный в C++, является итератором?C++

Программы на C++. Форум разработчиков
Anonymous
Есть ли способ гарантировать, что аргумент шаблона, переданный в C++, является итератором?

Сообщение Anonymous »

В C++ я реализую класс вектора и столкнулся с ошибкой при использовании любого типа в качестве аргумента для T:

Код: Выделить всё

void insert(iterator where, size_type count, const_reference value = T()){...}

template 
void insert(iterator where, InIt first, InIt last){...}
При выполнении следующих действий:

Код: Выделить всё

vector v;
for (int i = 0; i < 5; ++i)
{
v.push_back(i + 1);
}
v.insert(v.begin() + 2, 10, 8);
v.insert(v.begin() + 4, 9);
Он принимает аргумент для InIt как int, тогда как на самом деле он должен быть классом типа итератора и означает, что вызывается неправильная функция, что приводит к ошибкам внутренней памяти. В результате мне пришлось удалить функцию вставки с аргументом шаблона , поскольку это разрушает мою реализацию. Я попробовал это с std::string, и возникла та же проблема.

Могу ли я что-нибудь сделать, чтобы различить эти две функции?

Подробнее здесь: https://stackoverflow.com/questions/311 ... n-iterator

Вернуться в «C++»