std::formatter<std::chrono::zoned_time>
的值来重复使用?
我需要能够重复使用相同的格式字符串来格式化时间。我似乎不知道如何为此保留
std::formatter
实例。维基百科表明,这通常不是已完成的事情:
std::formatter 特化通常不直接访问,而是通过格式化函数使用。
那么,没有黑客就可以吗?
如果您唯一的需求是“能够使用相同的格式字符串重复格式化时间”,您可以只使用格式构造一个格式字符串然后存储它,并每次使用
std::vformat
进行zoned_time
格式化:
#include <chrono>
#include <format>
#include <print>
#include <string>
using namespace std::literals;
int main() {
auto date_fmt = "%D"s;
auto runtime_fmt = std::format("{{:{}}}\n", date_fmt);
auto time = std::chrono::zoned_time{};
auto ret = std::vformat(runtime_fmt, std::make_format_args(time));
std::print("{}", ret);
}
https://godbolt.org/z/9T63b1Efe
不需要存储
std::formatter
,通常它们是通过直接使用格式化参数的格式化函数来构造的。