Это довольно простой C++ дизайн вопрос:Как обеспечить множество конструкторов, но не слишком много зависимостей?
У меня есть класс, который содержит некоторые данные, которые считываются только после того, как объект построен:
class Foo {
private:
class Impl;
Impl* impl_;
public:
int get(int i); // access internal data elements
};
Теперь я хотел бы реализовать несколько способов построить объект Foo
и заполнить его данными: от std::istream
, от итератора, вектора и т. д. Каков наилучший способ реализовать это?
Я мог бы просто добавить все эти конструктор непосредственно в Foo
, но я не хочу, чтобы Foo
пользователю придется включать std::istream
и т.д. Я тоже беспокоюсь о классах, содержащих слишком много коды.
Какой самый идиоматический способ сделать это? Я полагаю, добавьте некоторую приватную функцию addElement
, а затем определите функции фабрики друзей, которые создают объекты Foo
, читая данные, вызывая addElement
и вернув построенный объект? Любые другие варианты?
Я думаю, что '#include' может быть, что один ищет (для объявляющих потоков вперед). –
UncleBens