Мне нужно реализовать функцию, которая принимает итератор. Итератор должен разыменование к определенному типу, скажем, INT:убедитесь, что итератор разделен на определенный тип
template<typename iter>
void f(iter i) {
// do something here ...
int t = *i;
// do something here ...
}
Проблема с этим кодом является то, что если пользователь вызывает функцию, как этот
vector<string> v;
v.push_back("aaa");
f(v.begin());
он увидит ошибки, указывающие на какое-то место в моем коде, а не в его коде (что будет с ним сбивать). Я хочу, чтобы ошибка была в коде пользователя, чтобы облегчить отладку.
Мне нравится решение Лютера Блиссетт в своей естественной продукции (когда пользователь видит «не соответствие функции ...«он начинает проверять тип аргументов и не предполагает, что в моей функции есть ошибка). Кроме того, решение GMan очень хорошо, потому что оно явно сообщает, в чем проблема. –