在 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
我使用 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