对于非可复制类型的范围循环,是否可能?

alf*_*lfC 5 c++ for-loop reference c++11

我有一些重复的代码,我从两个流中读取,

{
std::ifstream ifs("A.dat");
... code ...
}
{
std::ifstream ifs("B.dat");
... same code ...
}
Run Code Online (Sandbox Code Playgroud)

我想在一个循环中统一两者.第一反应是这样做:

for(auto ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
Run Code Online (Sandbox Code Playgroud)

但是它没有编译,因为类型不可复制,所以我尝试了这个:

for(auto& ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为ifs在循环内部是const.(a const ifstream不能使用.)这也不起作用,我想也是出于同样的原因:

for(auto&& ifs : {ifstream("A.dat"), ifstream("B.dat")})
Run Code Online (Sandbox Code Playgroud)

最后,我最终做到了这一点.

#include<iostream>
int main(){
for(auto& name : {"A.dat", "B.dat"})
{
    std::ifstream ifs(name);
    ... code ...
}
Run Code Online (Sandbox Code Playgroud)

但我仍然很好奇是否有可能直接使用类似的类型std::ifstream

Sam*_*hik 5

std::ifstream streams[2];

streams[0].open("A.dat");
streams[1].open("B.dat");

for (auto &stream:streams)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)