Выведение параметра шаблона из параметра конструктора constexpr

У меня есть функция форматирования строки, которая предназначена только для приема строкового литерала в качестве строки формата. Я хотел бы подсчитать количество заполнителей формата во время компиляции и статического утверждения, что количество заполнителей соответствует количеству аргументов. В настоящее время я делаю это с помощью макроса, но он разрушает разрешение перегрузки, которое мне нужно сохранить.

Итак, я пытаюсь передать счетчик заполнителей как параметр шаблона без типа в мою функцию форматирования.

В настоящее время у меня есть это

template <u32 PlaceholderCount, u32 N, typename... Args>
b32
String_FormatImpl(String& string, const c8 (&format)[N], Args&&... args);

#define String_Format(string, format, ...) \
    String_FormatImpl<CountPlaceholders(format)>(string, format, __VA_ARGS__)

Но то, что я ищу, похоже на это

template <int Count>
struct FormatLiteral
{
    const char* format;

    constexpr FormatLiteral(const char* format)
        : format(format)
    {}
};

FormatLiteral(const char* format) -> FormatLiteral<CountPlaceholders(format)>;

template <u32 PlaceholderCount, typename... Args>
b32
String_Format(String& string, FormatLiteral<PlaceholderCount> format, Args&&... args);

Возможно ли это? Кажется, что конструкторы constexpr и руководства по выводам шаблонов могут быть возможными путями, но я все еще схожу с ума по руководствам по выводам.

Вот минимальная попытка: https://godbolt.org/z/Sjjtdo

0 ответов

Другие вопросы по тегам