8

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

有没有人尝试过这个?

4

1 回答 1

4

我相信你不能 - 主要问题是你如何从函数中得到结果。当您返回一个字符串时,您实际上可以返回(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,我不确定它是否会算在内。

于 2013-02-02T10:34:18.767 回答