void foo(T* values, int N);Стандартное решение для C++:
template <typename it_t>Ну, если у нас есть
void foo(it_t first, it_t last);
vector<string>
и foo()
работает с string
- то все тривиально. Засада если у нас все лежит как-нибудь не так, например в map<int,string>
или в каком-нибудь vector<Object>
, у которого нужно вызвать Object::GetString()
для каждого элемента. А если еще и не все значения подряд нужны?Можно, конечно, в цикле перегнать нужные значения в отдельный контейнер, и уже дальше передать его. Но мало того, что это не путь настоящих
Тут стоит вспомнить, что умные дядьки уже подумали о нас, написали нужные адаптеры для итераторов, и запихнули все это в boost. Так, transform iterator достанет нам строку из
pair<int,string>
или Object::GetString()
, а filter iterator отфильтрует нам элементы на ходу.
Комментариев нет:
Отправить комментарий