Выведение параметра шаблона из параметра конструктора 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