在用boost递归迭代文件目录时,代码如下:
1 namespace bfs = boost::filesystem; 2 void find_file(const bfs::path& p) { 3 bfs::directory_iterator iter(p), end_iter; 4 while (iter != end_iter) { 5 if (bfs::is_directory(iter->status())) { 6 cout << *iter << endl; 7 find_file(iter->path()); 8 } else { 9 cout << *iter << endl; 10 } 11 ++iter; 12 } 13 }
其中iter->path()和iter->status()这两个函数没有找到声明的地方,基类里面也有没找到。使用code::blocks编译通过,用eclipse+CDT却编译不了。都是使用mingw的gcc编译器,boost版本是1.5.0。请问是iter->path()和iter->status()两个函数是在哪里声明的?directory_iterator为什么又可以使用?
另外还有一个问题不是很明白,在函数声明前加宏名是什么意思?例如:(代码来自:boost1.5.0/boost/filesystem/operations.hpp)
BOOST_FILESYSTEM_DECL path absolute(const path& p, const path& base=current_path());
其中BOOST_FILESYSTEM_DECL为在boost/filesystem/config.hpp中定义的宏。这样的写法是起什么作用?
我是C++菜鸟,请前辈指点,谢谢!
iter->path()和iter->status()两个函数是在 operations.hpp中定义的,定义在directory_entry中,directory_iterator返回的是一个directory_entry对象,所以就可以使用了。
BOOST_FILESYSTEM_DECL这个宏就是在编译时判断是要导出函数还是要使用函数来给这个宏赋值,要使用时这个宏就是空的,相当于什么都没有