首先,我读过这个问题: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随机? –