gpt4 book ai didi

c++ - 在 std 算法中否定 boost is_directory

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:49 25 4
gpt4 key购买 nike

boost::filesystem::recursive_directory_iterator end, begin(directory);

auto num_of_files=std::count_if(begin, end,
std::not1(boost::filesystem::is_directory)));

我试图在上面的目录迭代器上否定函数 is_directory 但我碰壁了。我尝试将 not1 的模板指定为 bool(*)(const boost::filesystem::path&) 并尝试静态转换函数,但都没有成功。

我知道我可以求助于 lamdba,但如果它有效,它会更干净。

谢谢

最佳答案

std::not1 需要一个函数对象作为它的参数。这个函数对象可以用 std::ptr_fun 获得,所以这应该可以工作:

auto num_of_files=std::count_if(begin, end, 
std::not1(std::ptr_fun((bool(*)(const boost::filesystem::path&))boost::filesystem::is_directory)));

(括号的数量可能不正确)。顺便说一句,您需要强制转换,因为 is_directory 是一个重载函数。

但是,既然你标记了你对 c++11 的质疑,你就可以使用 lambdas:

auto num_of_files=std::count_if(begin, end, [](const boost::filesystem::path& p) { return !boost::filesystem::is_directory(p); });

关于c++ - 在 std 算法中否定 boost is_directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7471206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com