【发布时间】:2019-09-21 12:03:47
【问题描述】:
我主要对#include <filesystem> 的案例感兴趣,但也对最终纳入标准的其他实验性功能感兴趣。众所周知,问题在于随着新 C++ 特性的推出(例如 C++17 中的文件系统),一些编译器可能会将它们实现为实验特性(例如 GCC 7),而其他编译器可能会将其实现为一个非实验性的功能。我意识到从实验到最终实现时,API 确实会略有变化,但为了以下起见,假设它们没有......
有没有办法像 SFINAE 那样包含正确的文件。在伪代码中它看起来像这样:
#ifdef filesystem
#include <filesystem>
using std::filesystem;
#else
#include <experimental/filesystem>
using std::experimental::filesystem;
#endif
我不知道有任何编译时机制可以在找不到文件的情况下执行某些操作。有这样的事吗?
我知道解决此问题的其他方法,但它们都依赖于检测特定的编译器,然后声明一个宏来告诉您使用哪个 #include。因此,请不要发布本质上只是查看编译器是否为 GCC 7 的响应,然后基于此进行一些处理。
【问题讨论】: