我需要一个函数模板,它接受两个可能是指针的迭代器。如果这两个参数是 random_access 迭代器,我希望返回类型是
std::iterator<random_access_iterator_tag, ...>
类型
否则一个
std::iterator<bidirectional_iterator_tag, ...>
类型。
如果参数既不是双向迭代器也不是指针,我还希望代码拒绝编译。我不能依赖第三方库,例如 Boost
你能帮我处理这个函数的签名,让它接受双向迭代器和指针,但不说 input_iterator、output_iterator、forward_iterators。
我能想到的一个部分解决方案如下
template<class T>
T foo( T iter1, T iter2) {
const T tmp1 = reverse_iterator<T>(iter1);
const T tmp2 = reverse_iterator<T>(iter2);
// do something
}
这个想法是,如果它不是双向的,编译器不会让我从中构造一个 reverse_iterator。