【问题标题】:C++: compile-time #Include handling if file not foundC ++:编译时#如果找不到文件则包含处理
【发布时间】: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 的响应,然后基于此进行一些处理。

【问题讨论】:

    标签: c++ c++17


    【解决方案1】:

    C++17 引入了__has_include 预处理器测试。您可以使用它来检查标头的存在:

    #if __has_include(<filesystem>)
    #  include <filesystem>
    #else
    //...
    #endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2013-03-27
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多