2010-05-30 9 views
5

C++ 0x N3092 indique que monotonic_clock est facultative:Comment déterminer si std :: chrono :: monotonic_clock est disponible?

20.10.5.2 classe monotonic_clock [time.clock.monotonic]

  1. objets de monotonic_clock de classe représentent des horloges pour lesquelles les valeurs de time_point jamais diminuer à mesure que le temps physique avance. monotonic_clock peut être un synonyme de system_clock si system_clock :: is_monotonic est vrai.

  2. La classe monotonic_clock est prise en charge de manière conditionnelle.

Puis-je utiliser SFINAE ou une autre technique pour définir une classe de traits pour déterminer si monotonic_clock est défini?

Si ce n'est pas le cas, ne devrait-il pas y avoir une macro standard qui indique si monotonic_clock est disponible?

Répondre

3

Il n'y a pas de façon entièrement conforme aux normes de détecter la présence de std::chrono::monotonic_clock. Comme il ressort des discussions sur comp.std.C++, il existe des techniques non conformes à la norme impliquant la déclaration d'un nouveau code dans l'espace de noms std.

+1

Est-il trop tard pour essayer d'ajouter une macro '__MONOTONIC_CLOCK_SUPPORTED' à la norme? Il me semble qu'il devrait toujours y avoir un moyen standard de tester si une fonctionnalité prise en charge conditionnellement est réellement supportée dans une implémentation donnée. Edit: Bien que, maintenant que j'ai trouvé [ce fil] (http://groups.google.com/group/comp.std.c++/browse_thread/thread/1a139fae83ebeb18/82c7b54911a313b0), peut-être que le LWG l'a déjà envisagé mais a décidé de ne pas ? –

+2

Cela n'aide pas les fonctionnalités prises en charge conditionnellement en général, mais en réalité 'monotonic_clock' est susceptible d'être renommé' steady_clock', et requis. Voir http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3128.html –

+0

Merci. J'étais au courant. –

0

Jetez un oeil à BOOST_MPL_HAS_XXX_TRAIT_DEF et consultez le fil compile time member detection. Je sais que VisualStudio a un mot-clé non standard __if_exists, mais AFAIK il n'est pas disponible sur d'autres compilateurs.

+0

Je connais cette technique. Le principal problème est que monotonic :: clock n'est pas membre d'une classe et donc la technique ne peut pas être appliquée (ou du moins pas directement). –