簡體   English   中英

C++: compile-time #Include handling if file not found

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM