Mam powielony kod, w którym czytam z dwóch strumieni,Dla pętli zasięgu dla typu bez możliwości kopiowania, czy jest to możliwe?
{
std::ifstream ifs("A.dat");
... code ...
}
{
std::ifstream ifs("B.dat");
... same code ...
}
chciałem zjednoczyć zarówno w jednej pętli. Pierwszą reakcją jest, aby to zrobić:
for(auto ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
Jednak to nie skompilować, ponieważ typ nie jest copyable, więc próbowałem to:
for(auto& ifs : {ifstream("A.dat"), ifstream("B.dat")})
{
... code ...
}
że nie działa, ponieważ ifs
w kasecie pętla to const
. (A const ifstream
nie może być używany.) to nie działało, myślę, że z tego samego powodu:
for(auto&& ifs : {ifstream("A.dat"), ifstream("B.dat")})
Na koniec oczywiście skończyło się to robi.
#include<iostream>
int main(){
for(auto& name : {"A.dat", "B.dat"})
{
std::ifstream ifs(name);
... code ...
}
Ale wciąż jestem ciekawy, czy możliwe jest, aby zakres dla pętli bezpośrednio z typem jak std::ifstream
?
Spójrz iteratory strumieniowych, choć zwątpienie wahało się - bo bardzo ci pomoże bez brzydkich hax –
@LightnessRacesinOrbit, hacki, tak, znalazłem, że mogłem 'const_cast' zmienną for-loop, która jest już dość brzydka. – alfC
'Initializer_list' zezwala tylko na dostęp' const' do swoich elementów, więc nie możesz robić tego, czego chcesz, bez uciekania się do jakiejś brzydoty gdzieś. – Praetorian