2010-05-30 10 views
5

C++ 0x N3092 establece que monotonic_clock es opcional:Cómo determinar si std :: chrono :: monotonic_clock está disponible?

20.10.5.2 Clase monotonic_clock [time.clock.monotonic]

  1. Objetos de monotonic_clock clase representan relojes para que valores de time_point Nunca disminuir a medida que avanza el tiempo físico. monotonic_clock puede ser un sinónimo de system_clock si system_clock :: is_monotonic es verdadero.

  2. La clase monotonic_clock es soportada de forma condicional.

¿Puedo utilizar SFINAE u otra técnica para definir una clase de rasgos para determinar si se ha definido monotonic_clock?

En caso negativo, ¿no debería haber una macro estándar que indique si monotonic_clock está disponible?

Respuesta

3

No existe una forma totalmente conforme a los estándares para detectar la presencia de std::chrono::monotonic_clock. Como se desprende de las discusiones sobre comp.std.C++, hay algunas técnicas que no se ajustan a las normas que implican la declaración de un nuevo código en el espacio de nombres std.

+1

¿Es demasiado tarde en el proceso para intentar agregar una macro '__MONOTONIC_CLOCK_SUPPORTED' al estándar? Me parece que siempre debe haber una forma estándar de probar si una característica soportada de forma condicional es realmente compatible con una implementación determinada. Editar: Sin embargo, ahora que encontré [ese hilo] (http://groups.google.com/group/comp.std.c++/browse_thread/thread/1a139fae83ebeb18/82c7b54911a313b0), tal vez el LWG ya lo consideró pero decidió no hacerlo. ? –

+2

Esto no ayuda con las funciones condicionalmente admitidas en general, pero en realidad es probable que el 'monotonic_clock' se renombre como' steady_clock' y se requiera. Ver http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3128.html –

+0

Gracias. Yo estaba enterado de eso. –

0

Eche un vistazo a BOOST_MPL_HAS_XXX_TRAIT_DEF y revise el hilo compile time member detection. Sé que VisualStudio tiene una palabra clave no estándar __if_exists, pero AFAIK no está disponible en otros compiladores.

+0

Conozco esta técnica. El principal problema es que monotonic :: clock no es miembro de una clase y, por lo tanto, la técnica no se puede aplicar (o al menos no directamente). –

Cuestiones relacionadas