c++ - 如何提供许多构造函数,但又没有太多依赖?

标签 c++ design-patterns constructor

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

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

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

现在,我想实现几种构造 Foo 对象并用数据填充它的方法:来自 std::istream,来自迭代器,来自 vector 等。实现它的最佳方法是什么?

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

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

最佳答案

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

class X
{
public:
    template <class InputIterator>
    X(InputIterator first, InputIterator last);
};

用法:

//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>());

关于c++ - 如何提供许多构造函数,但又没有太多依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2214812/

相关文章:

c++ - 提升 vector 序列化追加问题

python - 针对彼此差异很大但处理相似的功能进行模式和设计

java - 为什么私有(private)构造函数禁止继承?

c++ - 如何在类构造函数中初始化数组?

c++ - 仅在使用间接时调用虚函数——经典的早期绑定(bind)问题?

c++ - 具有不同子类型的参数方法

Java - 为过滤功能创建循环

design-patterns - 用于高可扩展网站的 ASP.NET ORM

java - Java的ArrayList的拷贝构造函数是浅拷贝还是深拷贝?

c# - 继承泛型构造函数 C#