Разумно соответствующая версия std::experimental::source_location
может быть реализован в GCC с __builtin_FILE()
, __builtin_LINE()
и т. д. Существуют ли подобные встроенные функции в Visual Studio 2017? Или есть ли способ реализовать std::experimental::source_location
в Visual Studio 2017?
К сожалению, в настоящее время нет способа правильно реализовать source_location только с помощью компилятора, поэтому вам придется использовать препроцессор и макросы, такие как __FILE__
, __LINE__
а также __FUNCTION__
передать информацию о местоположении в структуру данных, которая их хранит (то, что вы называете source_location).
Сказав это, я действительно разделяю вашу боль.
Недавно я разрабатывал небольшую библиотеку, которая добавляет данные о местоположении и некоторую другую информацию к исключениям, которые были выброшены, и там мне пришлось закончить с таким уродливым макросом, как MY_THROW(Exception(args))
который в основном просто передает значения, полученные из вышеупомянутых макросов, в функцию, которая выдает исключение. Как бы ужасно это ни выглядело, похоже, пока это единственный работающий вариант.
Других решений пока нет …