2010-05-30 25 views
5

的C++ 0x N3092指出monotonic_clock是可選的:如何確定std :: chrono :: monotonic_clock是否可用?

20.10.5.2類monotonic_clock [time.clock.monotonic]

  1. 類monotonic_clock的對象代表的時鐘,其time_point的值從不隨着物理時間的增加而減少如果system_clock :: is_monotonic爲true,則monotonic_clock可能是system_clock的同義詞。

  2. monotonic_clock類受條件支持。

我可以用SFINAE或其他技術來定義一個traits類,以確定是否monotonic_clock定義?

如果不是,不應該有一個標準的宏指出monotonic_clock是否可用?

回答

3

沒有完全符合標準的方法來檢測std::chrono::monotonic_clock的存在。從關於comp.std.C++的討論中可以明顯看出,有一些不符合標準的技術涉及在名稱空間std中聲明新代碼。

+1

嘗試獲取添加到標準中的__MONOTONIC_CLOCK_SUPPORTED宏是否太晚了?在我看來,應該總是有一種標準方法來測試給定實現中是否實際支持有條件支持的功能。編輯:雖然,現在我發現[該線程](http://groups.google.com/group/comp.std.c++/browse_thread/thread/1a139fae83ebeb18/82c7b54911a313b0),也許LWG已經考慮它,但決定不要? – 2010-09-24 16:00:33

+2

這對通常情況下支持的功能沒有幫助,但實際上'monotonic_clock'可能會被重命名爲'steady_clock',並且是必需的。見http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3128.html – 2010-09-24 16:15:16

+0

謝謝。我意識到這一點。 – 2011-01-01 22:04:17

0

看看BOOST_MPL_HAS_XXX_TRAIT_DEF並檢查線程compile time member detection。我知道VisualStudio有一個非標準關鍵字__if_exists,但AFAIK在其他編譯器上不可用。

+0

我知道這個技巧。主要的問題是monotonic :: clock不是一個類的成員,所以這個技術不能被應用(或者至少不是直接的)。 – 2010-06-02 11:05:06

相關問題