在std算法中否定boost is_directory

111*_*111 2 c++ boost negate c++11

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

auto num_of_files=std::count_if(begin, end, 
        std::not1(boost::filesystem::is_directory)));
Run Code Online (Sandbox Code Playgroud)

我试图在上面的目录迭代器上否定函数is_directory但是我遇到了一堵砖墙.我已经尝试为not1as 指定模板bool(*)(const boost::filesystem::path&)并尝试静态转换函数,但都没有成功.

我知道我可以诉诸lamdba但是如果它有效的话它会更干净.

谢谢

jpa*_*cek 6

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)));
Run Code Online (Sandbox Code Playgroud)

(括号的数量可能不正确).顺便说一下,你需要强制转换,因为它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); });
Run Code Online (Sandbox Code Playgroud)