Здравствуйте, Аноним, Вы писали:
А>Что делать если внутренний контейнер не std::vector<std::string>, а std::map<int, Z>, где Z — структура, из которой мы хотим выдавать лишь одно поле, а не всю структуру? Для этого подходит второй способ, но функцию приходится определять сразу, то есть в hpp-файле. Есть какое нибудь стандартное решение?
Поскольку объявление члена — container c — всё равно лежит в хедере, то не вижу препятствий, чтобы там же лежало и определение функции.
Оно несложное
template<class OutIt>
void copy(OutIt out)
{
std::transform(c.begin(), c.end(), out, theFieldOfZ);
}
// не хочу городить bind в ущерб читаемости
static int justFieldOfZ(std::map<int,Z>::value_type const& elem)
{
return elem->second.theField;
}