2010-05-30 18 views
5

C++ 0 x N3092 monotonic_clock isteğe bağlı olduğunu belirtir:std :: chrono :: monotonic_clock öğesinin kullanılabilir olup olmadığı nasıl belirlenir?

20.10.5.2 sınıfı [time.clock.monotonic] monotonic_clock sınıf monotonic_clock arasında

  1. nesneler için saatler time_point asla değerleri temsil eder Fiziksel zaman ilerledikçe azalır. system_clock :: is_monotonic true ise monotonic_clock sistem_clock için bir eşanlamlı olabilir.

  2. Sınıf monotonik kilit, koşullu olarak desteklenir.

Ben SFINAE veya monotonic_clock tanımlı olup olmadığını belirlemek için bir özellikleri sınıfını tanımlamak için başka bir teknik kullanabilir miyim?

Değilse, monotonic_clock'un kullanılabilir olup olmadığını gösteren standart bir makro olmamalı mı?

cevap

3

std::chrono::monotonic_clock'un varlığını algılamak için tam standartlara uygun bir yol yoktur. Comp.std.C++ konusundaki tartışmalardan da anlaşılacağı gibi, std ad alanında yeni kodu bildiren standart olmayan uyumlu teknikler vardır.

+1

Standart bir '__MONOTONIC_CLOCK_SUPPORTED 'makrosunu eklemeye çalışmak için işlemin çok geç mi? Bana öyle geliyor ki, belirli bir uygulamada koşullu olarak desteklenen bir özelliğin gerçekten desteklenip desteklenmediğini test etmenin standart bir yolu olmalı. Düzenleme: Yine de, şimdi [bu iş parçacığı] 'nı bulduğum halde (http://groups.google.com/group/comp.std.c++/browse_thread/thread/1a139fae83ebeb18/82c7b54911a313b0), belki de LWG zaten bunu dikkate aldı ancak ? –

+2

Bu, koşullu olarak desteklenen özelliklerin genel olarak yardımcı olmaz, ancak aslında 'monotonic_clock', 'steady_clock' olarak yeniden adlandırılır ve gereklidir. Bkz. Http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3128.html –

+0

Teşekkürler. Farkındaydım. –

0

BOOST_MPL_HAS_XXX_TRAIT_DEF'a bakın ve compile time member detection konusuna bakın. VisualStudio'nun standart olmayan bir anahtar kelime olan __if_exists olduğunu biliyorum, ancak AFAIK diğer derleyicilerde mevcut değil.

+0

Bu tekniği biliyorum. Asıl sorun, monotonik :: saatin bir dersin üyesi olmaması ve tekniğin uygulanamaması (ya da en azından doğrudan değil) olmasıdır. –

İlgili konular