Как проверить строки для времени компиляции?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как проверить строки для времени компиляции?

Сообщение Anonymous »

Я пытаюсь заставить работать следующий код:

Код: Выделить всё

#include 
#include 
#include

template
struct ParseSpecifier;

template
struct ParseSpecifier
{
static void parse()
{
std::println("string");
}
};

template
struct ParseSpecifier
{
static void parse()
{
std::println("integer");
}
};

template
void parse_format(const std::string_view format)
{
if (Index == format.size())
return;

ParseSpecifier::parse();
parse_format(format);
}

int main()
{
parse_format("iiisss");
}
Я знаю, что существуют библиотеки (например, fmt), которые могут компилировать строки формата с проверкой времени, поэтому это должно быть каким-то образом возможно. Должен отметить, что конечная цель состоит не в том, чтобы напечатать «строку» и «целое число», а в том, чтобы создать std::tuple на основе i и s в предоставленной строке. Строка всегда будет известна во время компиляции.
Я начинаю с малого, поскольку только изучаю метапрограммирование шаблонов. Как я могу заставить такой код работать? Я понимаю, что формат не является constexpr, поскольку параметры функции не могут быть такими. Кроме того, std::string_view не может быть параметром шаблона. Если я использую template, мне нужно вызвать функцию типа parse_format(); , это ужасно.
Можно ли как-нибудь заставить мой код работать? Если нет, то какова наилучшая стратегия проверки строк во время компиляции?
Важное примечание: конечная функция будет вызываться с одним параметром, известным во время компиляции, и одним параметром реального времени (так же, как fmt ::формат).
Простое редактирование: https://godbolt.org/z/s8eoYarja

Подробнее здесь: https://stackoverflow.com/questions/784 ... mpile-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»