我读到here C ++ 17功能齐全,尽管规格还没有完全准备好。如何在我的代码中使用C ++ 17功能,尤其是在Eclipse CDT(Neon)中?
具体来说,我想使用filesystem
来轻松迭代目录。
答案 0 :(得分:7)
libc ++和libstdc ++在最近的版本中都有std::experimental::filesystem
。我没有意识到直接有std::filesystem
; C ++ 17还没有发布,这似乎是合理的。
boost
有boost::filesystem
,它在某些方面有所不同,但结构几乎相同。编写为使用boost::filesystem
的代码可以相对轻松地移植到std::filesystem
。
作为不兼容性的示例,boost
具有单个标志枚举,而std
具有多个标志枚举位域以及更多设置。
您可能必须将-std=c++1z
传递给编译器,检查您的libc++
或libstdc++
版本,切换您正在使用的版本,安装新版本等。或者安装boost,并使用C ++ 17s基于的文件系统库。
答案 1 :(得分:1)
虽然计划将std::filesystem
与C ++ 17一起提供,但当前的编译器实现尚未发布"官方" C ++ 17支持。正如Yakk中已经说明answer,最近的编译器和标准C ++库版本有std::experimental::filesystem
。
至少对于GNU编译器g++
我可以说你甚至不需要设置C ++ 17语言方言,使用C ++ 14就足够了!但是,您还需要另外链接(静态)库libstdc++fs.a
。
此外,定义std::filesystem
命名空间非常方便,因此您可以使用标题(几乎),就像它们已经完成一样:
// ...
#include <experimental/filesystem>
namespace std {
namespace filesystem = std::experimental::filesystem;
}
// now use std::filesystem ...
总结:
libstdc++fs.a
<experimental/filesystem>