Допустим класс содержит в себе контейнер объектов, причем, сам контейнером в узком смысле не является. Например -- класс, хранящий и выдающий дескрипторы открытых файлов, и предоставляющий дополнительные операции над ними. Как лучше предоставить средства для получения списка значений внутреннего контейнера?
Пример
class X {
public:
typedef std::vector<std::string> container;
private:
container c;
};
Можно выдать итераторы на начало и конец:
class X {
public:
typedef std::vector<std::string> container;
typedef container::iterator iterator;
iterator begin() { return c.begin(); }
iterator end() { return c.end(); }
//и конст итераторы
private:
container c;
};
Можно добавить функцию для копирования:
class X {
public:
typedef std::vector<std::string> container;
template <typename T> void copy(T out)
{
std::copy(c.begin(), c.end(), out);
}
private:
container c;
};
Есть еще подходы?
Что делать если внутренний контейнер не std::vector<std::string>, а std::map<int, Z>, где Z — структура, из которой мы хотим выдавать лишь одно поле, а не всю структуру? Для этого подходит второй способ, но функцию приходится определять сразу, то есть в hpp-файле. Есть какое нибудь стандартное решение?