C ++ 17支持Eclipse Neon

时间:2017-05-18 09:51:56

标签: c++ eclipse-cdt c++17

我读到here C ++ 17功能齐全,尽管规格还没有完全准备好。如何在我的代码中使用C ++ 17功能,尤其是在Eclipse CDT(Neon)中?

具体来说,我想使用filesystem来轻松迭代目录。

2 个答案:

答案 0 :(得分:7)

libc ++和libstdc ++在最近的版本中都有std::experimental::filesystem。我没有意识到直接有std::filesystem; C ++ 17还没有发布,这似乎是合理的。

boostboost::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 ...

总结:

  • 让eclipse使用c ++ 1y(C ++ 14)方言,这就足够了
  • 链接libstdc++fs.a
  • 包括<experimental/filesystem>