我的直觉答案是肯定的,并且“printf”也可以使用该实现。对于用户定义的类型,可能很容易超载。
有没有人曾尝试过这个?
答案 0 :(得分:3)
我相信你不能 - 主要问题是如何从功能中获得结果。当你返回一个字符串时,你实际上可以返回(1)new
- ed缓冲区(或malloc
ed同样糟糕),(2)静态缓冲区或(3)填充其他一些缓冲液中。
(1)显然是不允许的
(2)违反了sprintf
的合同(即,非constexpr
sprintf
也不得这样做。
(3)constexpr
无法进行作业。
如果您只是想要“sprintf
之类的东西”,不管用户是否有不方便,例如。像这样的界面将起作用:
my_sprintf<my_string<'%', 'd', '%', 'c'>, my_data<int, 42>, my_data<char, 'l'> >::string_value
第二个想法,你可以避免实际计算字符串,只是存储sprintf
调用的参数以供日后使用。然后,如果用户想要获得constexpr
,则可以调用该中间结果的非char*
方法,但是constexpr
函数可以获得单个字符。这将是sprintf
的非正统版本,我不确定它是否会算得上。