如何提供许多构造函数,但没有太多依赖项?

Fra*_*ank 3 c++ constructor design-patterns

这是一个非常基本的C++设计问题:

一旦构造了对象,我有一个包含一些只读数据的类:

class Foo {
private:
  class Impl;
  Impl* impl_;  
public:
  int get(int i); // access internal data elements
};
Run Code Online (Sandbox Code Playgroud)

现在,我想实现几种方法来构造一个Foo对象并用数据填充它:from std::istream,from iterator,vector等.实现它的最佳方法是什么?

我可以直接添加所有这些构造函数Foo,但我真的不希望Foo用户必须包含std::istream等等.我也担心包含太多代码的类.

最常用的方法是什么?我想,添加一些私有addElement函数,然后定义Foo通过读取数据创建对象,调用addElement并返回构造对象的友元工厂函数?还有其他选择吗?

Unc*_*ens 10

如果你想从一个范围构造一些东西,也许:

class X
{
public:
    template <class InputIterator>
    X(InputIterator first, InputIterator last);
};
Run Code Online (Sandbox Code Playgroud)

用法:

//from array
X a(array, array + array_size);

//from vector
X b(vec.begin(), vec.end());

//from stream
X c((std::istream_iterator<Y>(std::cin)), std::istream_iterator<Y>());
Run Code Online (Sandbox Code Playgroud)