boost :: filesystem :: directory_iteratorのコピーを作成する方法は?
-
28-10-2019 - |
質問
私はこれが愚かに聞こえることを知っていますが、この簡単な例を見てください(作業監督には複数のアイテムがあるはずです):
#define BOOST_FILESYSTEM_VERSION 3
#include <boost/filesystem.hpp>
#include <cassert>
int main()
{
using namespace boost::filesystem;
directory_iterator it("./");
directory_iterator it_copy = it;
++it;
assert(it_copy != it);
return 0;
}
it_copy
一緒に変更されます it
! (ブースト1.45)そのようなデザインにつながる可能性のある考慮事項(directory_iterator
スマートPTRのようなものです)?
コピーを保存する必要があります directory_iterator
後で使用します。
解決
を見てみると 参照 あなたはそれが宣伝されていることに気付くでしょう boost::single_pass_traversal_tag
.
これは(ブースト用語で)に相当するものです 入力イテレータ STLでは、ネットワーク接続からパケットを配信するイテレーターと考えてください。巻き戻すことはできません)。
また、注意してください(この同じページから):
i == j
それを意味しません++i == ++j
.
この時点で、なぜコピーできるのか疑問に思うかもしれません。その理由は、STLアルゴリズムがコピーで議論を行う標準を設定したためです。したがって、STLアルゴリズムをコピーできない場合、STLアルゴリズムでは使用できません。
所属していません StackOverflow