首先,我讀過這個問題:Is there a way to detect portably that a standard header is included using macros?我可以安全地使用#ifdef來知道是否包含C++ std標頭?
而我想知道的是:如何安全是它使用#ifdef
的檢測任務,如果包含一個C++的std頭,像在代碼如下:
namespace overwrite
{
using byte = unsigned char;
template <bool safeMode = true, typename generic>
void withZeros(generic *toBeOverwriten, size_t length = 1)
{
// do stuff
}
#ifdef _GLIBCXX_RANDOM // found this macro inside <random>
template <bool safeMode = true, typename generic>
void withRandomData(generic *toBeOverwriten, byte min = 0, byte max = 255)
{
// do stuff expecting <random> to be included
}
#endif
}
...所以,我不能只是重載一些性病的功能「更糟糕的比賽」作爲答案的問題提到的建議,同時也編譯或沒有我的頭的整體功能/節文件,這取決於包含一些標準頭。
這種方式不安全,因爲我懷疑嗎?如果是這樣,是否有其他方法可以檢測到這一點,以便做到我想要的?
關於以「見鬼,爲什麼不讓我包括頭」 ...
我給的是什麼,我試圖做一個例子的代碼僅僅是一個例子。我腦海裏還有其他的東西,只是想知道是否有另一種方法來檢查包含頭文件而不檢查你期望在這些頭文件中定義的宏。然後我想起了這種真實的情況,我問了自己這個問題,並開始問我在問什麼......因爲在這種情況下,我不想包含很多代碼(<random>
比20多或30 LOC)只是爲了「維持」我頭部的單個功能。
只需包含頭? – Dani
SFINAE ........? –
順便說一句,你爲什麼不簡單#include隨機? –