Код: Выделить всё
#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");
}
Я начинаю с малого, поскольку только изучаю метапрограммирование шаблонов. Как я могу заставить такой код работать? Я понимаю, что формат не является constexpr, поскольку параметры функции не могут быть такими. Кроме того, std::string_view не может быть параметром шаблона. Если я использую template, мне нужно вызвать функцию типа parse_format(); , это ужасно.
Можно ли как-нибудь заставить мой код работать? Если нет, то какова наилучшая стратегия проверки строк во время компиляции?
Важное примечание: конечная функция будет вызываться с одним параметром, известным во время компиляции, и одним параметром реального времени (так же, как fmt ::формат).
Простое редактирование: https://godbolt.org/z/s8eoYarja
Подробнее здесь: https://stackoverflow.com/questions/784 ... mpile-time
Мобильная версия