-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Язык для обучения программированию

Четверг, 13 Августа 2020 г. 11:12 + в цитатник
applegame:
Цитата D_KEY @
Ты про это:
Да, про это.
Цитата OpenGL @
Довольно изящное решение на мой взгляд.
Покопался в коде и нашел, как там вытаскиваются имена из энума. Это решается не при помощи языковых конструкций, а довольно грубым хаком, а именно расковыриванием значения макроса __PRETTY_FUNCTION__ (__FUNCSIG__ в Visual Studio), который мало того, что является не частью языка, а расширением некторых компиляторов, так еще и никак не стандартизирован.
В итоге в коде появляются магические константы, меняющиеся в зависимости от компилятора:
    template
    constexpr auto n() noexcept {
    static_assert(is_enum_v, "magic_enum::detail::n requires enum type.");
    #if defined(MAGIC_ENUM_SUPPORTED) && MAGIC_ENUM_SUPPORTED
    # if defined(__clang__)
    constexpr std::string_view name{__PRETTY_FUNCTION__ + 34, sizeof(__PRETTY_FUNCTION__) - 36};
    # elif defined(__GNUC__)
    constexpr std::string_view name{__PRETTY_FUNCTION__ + 49, sizeof(__PRETTY_FUNCTION__) - 51};
    # elif defined(_MSC_VER)
    constexpr std::string_view name{__FUNCSIG__ + 40, sizeof(__FUNCSIG__) - 57};
    # endif
    return static_string{name};
    #else
    return std::string_view{}; // Unsupported compiler.
    #endif
    }

То бишь, если слегка поменяется формат этого макроса, все поломается. И ты это называешь изящным решением?

Плюсы становятся всё хуже и хуже, нагромождение новых синтаксических конструкций, вот что это такое?
    constexpr std::string_view name{..., ...};

почему не так?
    constexpr std::string_view name(..., ...);

https://forum.sources.ru/index.php?showtopic=419241&view=findpost&p=3836437

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку