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/