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但是如果它有效的话它会更干净.
谢谢
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)