Как скопировать объекты из класса?
От: Аноним  
Дата: 19.07.10 08:17
Оценка:
Допустим класс содержит в себе контейнер объектов, причем, сам контейнером в узком смысле не является. Например -- класс, хранящий и выдающий дескрипторы открытых файлов, и предоставляющий дополнительные операции над ними. Как лучше предоставить средства для получения списка значений внутреннего контейнера?

Пример
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-файле. Есть какое нибудь стандартное решение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.