constexpr "[v[n]]sprintf"可能吗?
Is constexpr "[v[n]]sprintf" possible?
我的直觉答案是肯定的,"printf"也可以使用该实现。对于用户定义类型,重载可能很容易。
以前有人尝试过吗?
我相信
你不能 - 主要问题是你如何从函数中得到结果。当你返回一个字符串时,你实际上可以返回(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
调用的参数以供以后使用。然后,如果用户想要获得一个char*
,他将调用该中间结果的非constexpr
方法,但是单个字符可以通过constexpr
函数获得。那将是sprintf
的非正统版本,我不确定它是否算数。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 多成员Constexpr结构初始化
- 条件constexpr函数
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- Visual C++ constexpr Hints
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么constexpr的性能比正常表达式差
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 为什么std::isnan 不是 constexpr?
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 更多constexpr容器是否需要mark_immutable_if_consexpr
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- constexpr上下文中std::initializer_list的验证
- constexpr构造函数需要常量成员函数时出现问题
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- C++constexpr实现差异
- 添加静态constexpr成员是否会更改结构/类的内存映射
- constexpr "[v[n]]sprintf"可能吗?