Название: Ассоциации (?) Отправлено: Igors от Декабрь 05, 2020, 10:52 Добрый день
Есть такие данные Код Как я могу быть уверен что enum соответствует строке имени? При большом числе данных (и/или частых изменениях) это оказывается совсем не простым Спвсибо Название: Re: Ассоциации (?) Отправлено: kambala от Декабрь 05, 2020, 14:11 в данном случае — никак. а в Qt для этого есть QMetaEnum.
Название: Re: Ассоциации (?) Отправлено: Авварон от Декабрь 05, 2020, 14:48 можно поменять вектор на пару энум-строка и использовать богомерзкие макросы для описания элементов.
приправить static_assert для проверки валидности массива Название: Re: Ассоциации (?) Отправлено: RedDog от Декабрь 05, 2020, 17:43 Можно мапу/хеш завести
Название: Re: Ассоциации (?) Отправлено: Igors от Декабрь 06, 2020, 12:13 в данном случае — никак. а в Qt для этого есть QMetaEnum. "A можно пример?" :)можно поменять вектор на пару энум-строка и использовать богомерзкие макросы для описания элементов. Но сначала придется все равно объявить enum чтобы юзать его в пареприправить static_assert для проверки валидности массива Можно мапу/хеш завести Да, часто достаточно и вектора пар. но тогда потребуется find. С хешем выглядит примерно такКод Терпимо, но элегантностью не блещет, да и нет гарантии (компилятора) что все enum'ы будут в хеше Название: Re: Ассоциации (?) Отправлено: kambala от Декабрь 06, 2020, 15:06 Код
код писался еще под 4.8.7 и до С++11, может щас можно как-то получше. Название: Re: Ассоциации (?) Отправлено: Igors от Декабрь 07, 2020, 12:17 Код
код писался еще под 4.8.7 и до С++11, может щас можно как-то получше. Да, я тоже рассчитывал на какую-нить "фишку" из новых стандартов. Хотя сам дальше С++ 11 пока не уполз :)В любом случае спасибо за пример Название: Re: Ассоциации (?) Отправлено: AkonResumed от Апрель 03, 2021, 08:09 Хз. Год прошел. Но если прям нужна уверенность, то, навскидку, как-то так:
Код: #include <iostream> Или еще лучше - с компайл-тайм детектион: Код: template <Param> const char* ParamName = "Not associated!"; std::cout << ParamName<Third> << std::endl; // Not associated! просто будет давать ошибку компиляции. Здесь С++17 (template variables/constants, invokable lambda), но в С++11 это тоже принципиально достижимо. З.Ы. Сам всегда делал (и делаю) перечисление + массив строк (как у вас). Да, при изменении нужна скрупулезность. Зато достоинство - простота и читаемость кода. Да и часто для строк нужно делать перевод на разные языки, а это уже что-то вроде QCoreApplication::translate("context", QT_TRANSLATE_NOOP("context", "First parameter name") и только рантайм. Название: Re: Ассоциации (?) Отправлено: kambala от Апрель 27, 2021, 22:18 https://github.com/Neargye/magic_enum
Название: Re: Ассоциации (?) Отправлено: Igors от Апрель 28, 2021, 11:31 https://github.com/Neargye/magic_enum Да, вроде "в тему", спасибо. Правда сейчас навалилась др работа..Название: Re: Ассоциации (?) Отправлено: m_ax от Апрель 28, 2021, 15:56 https://github.com/Neargye/magic_enum Красивое решение)Название: Re: Ассоциации (?) Отправлено: ssoft от Апрель 28, 2021, 17:27 Если нужен свой велик для С++98, то можно что-то типа этого использовать
Код
Код
|