constexpr“[v [n]] sprintf”可能吗?

时间:2013-02-02 09:41:01

标签: c++ printf

我的直觉答案是肯定的,并且“printf”也可以使用该实现。对于用户定义的类型,可能很容易超载。

有没有人曾尝试过这个?

1 个答案:

答案 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的非正统版本,我不确定它是否会算得上。