这是一个非常基本的 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/