[英]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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.