私は、私は1つのループの両方を統一したかった二つの流れ、コピーできないタイプの範囲ループの場合は可能ですか?
{
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
です。私はこれをやってしまったコースの最後に
for(auto&& ifs : {ifstream("A.dat"), ifstream("B.dat")})
:これはどちらか動作しませんでした(。const ifstream
を使用することはできません) 、私は同じ理由だと思います。
#include<iostream>
int main(){
for(auto& name : {"A.dat", "B.dat"})
{
std::ifstream ifs(name);
... code ...
}
しかし、std::ifstream
のようなタイプと直接forループの範囲を持つことが可能であるならば、私はまだ好奇心?
for (auto& ifs: std::make_array(std::ifstream("A.dat"), std::ifstream("B.dat")))
{
// ...
}
をし、さらにハックで:
for (auto& ifs: std::array<std::ifstream, 2>{std::ifstream("A.dat"), std::ifstream("B.dat")})
{
// ...
}
TS2からstd::make_array
(http://en.cppreference.com/w/cpp/experimental/make_array)で、これはあまりにも動作します:@ SamVarshavchikの答えに触発さ
は、ストリームイテレータを見上げて疑問に思ったことは、醜いhaxなしでずっと助けてくれるでしょう –
@LightnessRacesinOrbit、hacks、はい、私はfor-loop変数を 'const_cast'することができました。 – alfC
'initializer_list'はその要素への' const'アクセスしか許可しないので、あなたはどこかの醜さに頼らずにあなたが望むことをすることができません。 – Praetorian