大多数人都知道不可能拥有standard collection of references。也无法复制流对象。
但是如果我想创建一个流对象或流对象引用的集合(例如std::vector
)呢?
我知道我可以将流对象引用包装在例如一个结构,但是你需要实现完整的接口(如果你想直接使用包装器作为流,我更喜欢),或者使用公共getter函数并在任何地方使用它来获取实际的流。
有更简单的方法吗? C ++ 11解决方案没问题。
答案 0 :(得分:7)
您不能拥有引用容器,但可以拥有std::reference_wrapper
容器。也许你想要这样的东西:
std::vector<std::reference_wrapper<stream_type>> v;
您可以将std::reference_wrapper
视为非常类似于引用(事实上,它可以隐式转换为引用类型),但它具有作为对象类型的额外优势。
答案 1 :(得分:0)
您可以在集合中使用不可复制的对象:
// this uses move constructors
std::vector<std::fstream> v {std::fstream{"file1.txt"}, std::fstream{"file2.txt"}};
// this doesn't require the type to even be movable
v.emplace_back("file3.txt");
虽然以这种方式避免使用指针和类似引用的类型,但只有在不需要将流用作多态对象时才会起作用。