2017-06-26 1 views
1

Une version raisonnablement conforme de std::experimental::source_location peut être implémentée dans gcc avec __builtin_FILE(), __builtin_LINE(), etc. Des intrinsèques similaires existent-ils dans Visual Studio 2017? Ou est-il possible d'implémenter std::experimental::source_location dans Visual Studio 2017?std :: experimental :: implémentation source_location dans Visual Studio

+0

Il existe des macros définies dans VS '__FILE__'' __LINE__' '__FUNCTION__' – drescherjm

+2

Cela ne suffit pas pour implémenter' source_location'. '__builtin_FILE()' renvoie le nom de fichier de l'appelant, pas l'emplacement brut. Il a été implémenté par le compilateur, pas par le préprocesseur comme peuvent l'être ces macros. – Mike

Répondre

1

Malheureusement, au moment il n'y a aucun moyen de mettre en œuvre correctement source_location seulement au moyen de compilateur, de sorte que vous devrez utiliser préprocesseur et macros comme __FILE__, __LINE__ et __FUNCTION__ pour nourrir les informations sur la position dans la structure de données qui stocke eux (ce que vous appelez source_location).

Cela dit, je partage vraiment votre douleur.

J'ai récemment développé une petite bibliothèque qui ajoute des données de localisation et d'autres informations aux exceptions qui sont levées, et là j'ai dû me retrouver avec une macro moche comme MY_THROW(Exception(args)) qui alimente simplement les valeurs obtenues de ce qui précède macros dans la fonction qui jette une exception. Aussi terriblement beau que cela puisse paraître, il semble que ce soit la seule option de travail à ce jour.