Информация об изменениях

Сообщение Re[13]: имя переменной в компайл-тайм от 18.03.2018 13:01

Изменено 18.03.2018 13:09 Маркуша Шулин

Re[13]: имя переменной в компайл-тайм
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ollv, Вы писали:


O>> Из данного примера выходит, что размер __PRETTY_FUNCTION__ компайл тайм сущность.


R>Если пример с sizeof не достаточно убедителен, можно получить даже отдельные символы из __PRETTYY_FUNCTION__ в компайл тайм:


R>https://ideone.com/mPh41g


R>
R>template <typename T, size_t I>
R>constexpr char get_pretty_function_at()
R>{
R>  return __PRETTY_FUNCTION__[I];
R>}

R>static_assert('i' == get_pretty_function_at<int, 42>(), "invalid symbol");
R>static_assert('e' == get_pretty_function_at<double, 55>(), "invalid symbol");
R>static_assert('b' == get_pretty_function_at<std::string, 64>(), "invalid symbol");
R>


проапдейтим.
https://ideone.com/n7BbaZ

  static_assert("1"[0] == '1', "It is not a compiletime array");

Вообще, я тут должен кое что уточнить, в gcc есть возможность работать со строковыми литералами в компайл тайм.
что неплохо используется в MPLSTRING И вполне парсить их, я даже часть парсера регулярок реализовывал на базе этого.
Но вот именно в преттифанкшин, эта странность, что сделать из него параметр шаблона — не выходит. Хотя просто хотелось бы просто сделать из нее параметр для для прагмы мессадж ..
Re[13]: имя переменной в компайл-тайм
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ollv, Вы писали:


O>> Из данного примера выходит, что размер __PRETTY_FUNCTION__ компайл тайм сущность.


R>Если пример с sizeof не достаточно убедителен, можно получить даже отдельные символы из __PRETTYY_FUNCTION__ в компайл тайм:


R>https://ideone.com/mPh41g


R>
R>template <typename T, size_t I>
R>constexpr char get_pretty_function_at()
R>{
R>  return __PRETTY_FUNCTION__[I];
R>}

R>static_assert('i' == get_pretty_function_at<int, 42>(), "invalid symbol");
R>static_assert('e' == get_pretty_function_at<double, 55>(), "invalid symbol");
R>static_assert('b' == get_pretty_function_at<std::string, 64>(), "invalid symbol");
R>


проапдейтим.
https://ideone.com/n7BbaZ

  static_assert("1"[0] == '1', "It is not a compiletime array");

Вообще, я тут должен кое что уточнить, в gcc есть возможность работать со строковыми литералами в компайл тайм.
что неплохо используется в MPLLIB И вполне парсить их,
https://github.com/sabel83/mpllibs/blob/master/libs/safe_printf/example/validate/main.cpp
я даже часть парсера регулярок реализовывал на базе этого.
Но вот именно в преттифанкшин, эта странность, что сделать из него параметр шаблона — не выходит. Хотя просто хотелось бы просто сделать из нее параметр для для прагмы мессадж ..