在 g++ 9.3.0 中使用 std::experimental::filesystem

Using std::experimental::filesystem with g++ 9.3.0

我使用 VS2015 作为我的主要开发工具并使用 std::filesystem 我需要写这样的东西:

namespace fs = std::experimental::filesystem;

现在我需要使用 g++ 9.3.0 编译此代码,当然,会收到有关“实验”部分的错误。有没有办法在我的代码中保留这个旧东西并用现代 g++ 编译它?

对 g++ 使用 namespace fs = std::filesystem;。如果您需要在两个编译器中编译相同的代码,请使用 #if 来区分它们。

我会使用 版本的 C++ 标准 结合预处理器指令来区分它们,因为文件系统库已经 officially introduced in C++17

#if __cplusplus >= 201703L
  #include <filesystem>
  namespace fs = std::filesystem;
#else
  #include <experimental/filesystem>
  namespace fs = std::experimental::filesystem;
#endif

如果您在使用 C++17 中的另一个库时遇到这种情况,您可以使用 __has_include

#if __has_include(<some_lib>)
  #include <some_lib>
  namespace sl = std::some_lib;
#else
  #include <experimental/some_lib>
  namespace sl = std::experimental::some_lib;
#endif