迭代两种可能类型的可迭代对象 C++

Iterate over two possible types of iterable objects C++

我希望我的程序灵活,并且能够遍历我当前正在使用的目录中的文件列表

        for(const auto& dirEntry : fs::directory_iterator(input_dir))

其中 fs 是文件系统。 我还希望能够迭代字符串向量,并在运行时在这两种不同类型之间进行选择。然而,到目前为止,我最好的想法是只使用两个不同的 for 循环并使用 if/else 语句选择正确的循环,但这感觉像是一个糟糕的编码选择。 有没有什么方法可以通用地迭代一个或另一个?

您可以将带有循环的代码提取到模板中,例如

template<class Range> void DoWork(Range&& dirEntries)
{
    for (const auto& dirEntry : dirEntries)
        ; // ...
}

然后 instantiate/call 模板

DoWork(fs::directory_iterator(input_dir));

DoWork(myVectorOfStrings);

请注意,无论您在循环体中做什么,都必须适用于范围内的任何元素类型(std::stringfs::path 等)。