将目录迭代器切换到同一循环的递归?

问题描述 投票:0回答:1

是否可以在同一循环中在目录迭代器的递归版本和非递归版本之间切换?之所以要这样做,是因为我真的不想只为递归版本重复整个代码。

#include <iostream>
#include <filesystem>
#include <string>

int main()
{
    std::string DirPath = "C:\\Users";

    // Switch loop to recusive
    bool isRecursive = false;

    // ERROR: Not working
    auto it = isRecursive ? std::filesystem::recursive_directory_iterator(DirPath) : 
       std::filesystem::directory_iterator(DirPath);

    for (const auto& entry : it) {

        if (std::filesystem::is_regular_file(entry)) {

            // .......
        }
    }

}
c++ filesystems
1个回答
0
投票

它不起作用,因为这两个迭代器具有不同的类型,并且不能转换为通用类型。因此,auto现在不能,应该是什么类型。您有两个可能性:

recursive_directory_iterator具有方法disable_recursion_pending,该方法禁用递归直到下一个增量,因此您必须在每个循环中调用一次。

© www.soinside.com 2019 - 2024. All rights reserved.