C++:如果未找到文件,则进行编译时 #Include 处理
C++: compile-time #Include handling if file not found
主要是我对#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++17 引入了__has_include
预处理器测试。您可以使用它来检查标头是否存在:
#if __has_include(<filesystem>)
# include <filesystem>
#else
//...
#endif
相关文章:
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- C++:如果未找到文件,则进行编译时 #Include 处理
- GTK+3 编译错误"找不到信号处理程序",您是否使用 -rdynamic 进行了编译?
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- C++编译时/运行时选项和参数,如何处理?
- 是否可以使用开发控制台使用批处理脚本编译 c++
- 在 Mac 上C++编译代码时处理“dyld:惰性符号绑定失败:找不到符号”错误
- 用于对编译时字符串进行哈希处理的延迟指针
- STXXL的任何STXXL替代方案都可以在编译时处理未知大小或任何技巧
- 预处理之后和使用CMake编译之前的自定义构建步骤
- C++交叉编译不处理换行输入文本文件
- (C++)GTK 警告 **:找不到信号处理程序。您是否使用 -rdynamic 编译?
- boost asio自定义分配器处理程序io服务编译后错误
- c++在编译阶段如何处理未知大小的数组分配
- 编写 scons 脚本来处理许多子目录中的文件编译
- 从 Linux 到 Windows 交叉编译时,我应该如何处理字符编码
- 有没有办法使用 clang 有效地编译已经预处理过的文件
- 我必须如何处理交叉编译C++库
- 批处理文件,用于在任何PC上编译.cpp文件
- c++:为什么可以编译?(处理this-Reference到基类)