Hol*_*Cat 12 c++ fmt stdformat
假设我想std::formatter绕过直接使用 来格式化单个对象std::format。我怎么做?
根据Formatter,我需要调用.format(value, format_ctx),其中format_ctx是std::format_contextor std::basic_format_context<...>。但我如何构建这个上下文呢?
该标准似乎没有提供一种构建方法。查看libstdc++ 源代码, 的成员变量basic_format_context都是私有的,没有非默认构造函数,并且如果不是friend.
这是否意味着std::formatter不可能按设计手动使用?
我为什么要这样做?
我想使用“调试格式”( "{?:}") 来格式化一个值(如果支持的话),回退到常规"{}".
检查支持的方法似乎是requires(std::formatter<T> f){f.set_debug_format();},我想如果我已经直接与格式化程序交互,我不妨只使用格式化程序本身。
std::(v)format(_to)不支持您所描述的用例,即您从未实际调用而只是直接使用格式化程序。您应该只std::format使用您想要使用的格式字符串进行调用,即{}或{:?}。
即使你可以绕过std::format,你也只是在为自己创造工作。您必须手动调用std::formatter<T>::parse 和 std::formatter<T>:format(因为前者设置后者使用的状态)。并且您必须手动设置std::basic_format_parse_context和std::basic_format_context对象的内容,假设它们首先支持该内容。
另一方面,格式化程序可以通过传递库传递给它的std::basic_format_parse_context和稍后的 来调用另一个格式化程序。std::basic_format_context这基本上就是实现范围格式化程序的方式(如果不是因为标准已经提供了一个)。
| 归档时间: |
|
| 查看次数: |
367 次 |
| 最近记录: |