Я хочу объявить алгоритм, который принимает пару итераторов и критерий. Затем он возвращает вектор элементов из диапазона итераторов, которые соответствуют критерию.Как объявить этот алгоритм?
template <typename TIterator, typename TCriterium>
std::vector< Type that I will get after dereferencing TIterator >
filter (TIterator begin, TIterator end, TCriterium passes);
Я могу использовать возможности C++ 11, такие как decltype или auto. Я пробовал:
#include <vector>
template <typename TIterator, typename TCriterium>
auto filter (TIterator begin, TIterator end, TCriterium passes)
-> std::vector< decltype(*begin) >
{
}
int main()
{
std::vector<int*> vector;
filter(vector.begin(), vector.end(), 0);
return 0;
}
Но это не работает. Я получаю:
/usr/include/c++/4.7/ext/new_allocator.h:59:
error: forming pointer to reference type 'int*&'
Заметим, что [˙copy_if'] (http://en.cppreference.com/w/cpp/algorithm/copy) ведет себя почти то же самое, только то, что вам нужно передать выходной итератор. – jrok