Как можно преобразовать строку времени компиляции (BOOST_METAPARSE_STRING) в строку времени выполнения? - PullRequest
0 голосов
/ 15 января 2019

Как преобразовать параметр шаблона BOOST_METAPARSE_STRING времени компиляции в "обычную" строку?

Я использую BOOST_METAPARSE_STRING для предоставления строки в качестве параметра шаблона (за один раз / один раз). Следующие компиляции отлично:

template<class T>
struct t{
};

t< BOOST_METAPARSE_STRING("hello") > tt_;

Однако в какой-то момент мне также нужно отобразить строку и т. Д., И я не нашел способа построить какую-либо форму строки времени выполнения, std::string / независимо от типа времени компиляции. Я знаю, что это возможно, но как?

Кроме того, мне интересно, можно ли передать значение параметра шаблона (например, const char*)?

1 Ответ

0 голосов
/ 15 января 2019

Согласно документации для BOOST_METAPARSE_STRING, она генерирует специализацию boost::metaparse::string (задокументировано здесь ).Поскольку это простой шаблон класса, его достаточно легко конвертировать:

template <char... Chars>
std::string toString(boost::metaparse::string<Chars...>) {
    return {Chars...};
}

Смотрите его в прямом эфире на Coliru


Альтернативно, если вы не чувствуетекак изобретать колесо, прежде чем просматривать документацию (вот так), вот что делает boost::mpl::c_str.

...