constexpr"[v [n]] sprintf"可能吗?

rub*_*nvb 5 c++ printf

我的直觉答案是肯定的,实现也可以由"printf"使用.对于用户定义的类型,可能很容易超载.

有没有人曾尝试过这个?

jpa*_*cek 4

我相信你不能 - 主要问题是你如何从函数中得到结果。当你返回一个字符串时,你实际上可以返回(1)一个new-ed 缓冲区(或malloced ,它同样糟糕),(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
Run Code Online (Sandbox Code Playgroud)

再想一想,您可以避免实际计算字符串,而只存储调用的参数sprintf以供以后使用。如果用户constexpr想要获得 ,则可以调用该中间结果的非方法char*,但单个字符可以通过constexpr函数获得。这将是一个非正统的版本sprintf,我不确定它是否重要。