我有一些重複的代碼,這是我從兩個流讀取,對於不可複製類型的範圍循環,有可能嗎?
{
std::ifstream ifs("A.dat");
... code ...
}
{
std::ifstream ifs("B.dat");
... same code ...
}
我想在一個循環統一兩者。 第一反應就是要做到這一點:
for(auto ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
但是它並不能編譯,因爲類型是不可拷貝的,所以我想這:
for(auto& ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
不會因爲ifs
內工作循環是const
。 (一const ifstream
不能使用。) 這也不能工作,我覺得出於同樣的原因:
for(auto&& ifs : {ifstream("A.dat"), ifstream("B.dat")})
在課程結束時,我終於實現了這一點。
#include<iostream>
int main(){
for(auto& name : {"A.dat", "B.dat"})
{
std::ifstream ifs(name);
... code ...
}
但我仍然好奇,如果有可能有一系列的循環直接與型像std::ifstream
?
查一查流迭代器,雖然我懷疑遠距離爲你提供幫助而不會感到醜陋hax –
@LightnessRacesinOrbit,hacks,是的,我發現我可以'const_cast' for循環變量,這已經很醜了。 – alfC
一個'initializer_list'只允許'const'訪問它的元素,所以如果不在某個地方使用某種醜陋的東西,你就無法做到你想要的東西。 – Praetorian