我正在尝试编写一个小型C ++实用程序库,其中包括(实际上)几乎可以在任何平台上使用clock_gettime()API。*基本上,我想检查clock_gettime()是否存在,使用本机实现它是可用的,并且如果它不可用,则基于其他计时器API实现它。容易,对吗?我预计这将是非常微不足道的,所以很自然地,它几乎不可能按照我想要的方式去做。 ;)
这是我的问题:如果我希望用户能够透明地调用clock_gettime()API,我需要我的头文件完全检测是否存在本机声明/定义:
那么,有没有办法可靠地检测clock_gettime()?我知道如果存在clock_gettime(),unistd.h应该定义_POSIX_TIMERS宏...但这是否保证每个实现? (根据我的理解,它不是,但我可能是错的。)
如果没有“自动”解决方案,是否有任何支持(或不支持)clock_gettime()的所有平台的可靠,精确列表及其识别宏(对于那些不在http://sourceforge.net/p/predef/wiki/OperatingSystems/的人) ?这并不理想,因为随着新平台的出现,列表可能会失去同步,但它总比没有好。
我当然可以为我自己的小型库创建一个全新的计时器API。然后我可以保守地检测clock_gettime()并在必要时回退到其他后端。这是一个很容易实现的明显解决方案,但是...谁想学习另一个愚蠢的计时器API?世界真的需要一个,只是为了解决没有内置机制的语言的愚蠢,以检测给定的函数是否已经存在? ;)
*理由:为什么我不使用C ++ 11的std :: chrono?