Я пытаюсь определить новый строковый литерал в аргументах шаблона функции.
template<const char* msg>
const char* function()
{
return msg;
}
int main()
{
function<"why doesnt this work?">()
return 0;
}
Однако это не работает.Я должен сделать что-то вроде этого
constexpr char msg[] = "this is ugly and annoying";
int main()
{
function<msg>()
return 0;
}
Это крайне неудобно.Я пытаюсь создать printf-подобную функцию, но это серьезное препятствие.Если я перейду к фиктивной строке (например, tuple('a','b','c'...
), то это сделает интерфейс для расширения пользовательских форматов более сложным и уродливым, а также код в целом.(% d%,% f%,% e% являются форматами по умолчанию,% myformat% - это пользовательский пример. Они могут быть сколько угодно долго из-за% terminator)
Как я могу получитьмой торт и съесть его тоже (или хотя бы как можно ближе к нему)?