gpt4 book ai didi

c++ - FMT C++ 库 : allow user to set format specifiers for custom type

转载 作者:可可西里 更新时间:2023-11-01 18:39:21 27 4
gpt4 key购买 nike

我有一个自定义类型,例如

struct custom_type
{
double value;
};

我想为此类型设置一个自定义的 FMT 格式化程序。我执行以下操作并且有效:

namespace fmt
{
template <>
struct formatter<custom_type> {
template <typename ParseContext>
constexpr auto parse(ParseContext &ctx) {
return ctx.begin();
};

template <typename FormatContext>
auto format(const custom_type &v, FormatContext &ctx) {
return format_to(ctx.begin(), "{}", v.value);
}
};

但问题是,输出格式是由模板代码设置的,使用这个 "{}" 表达式。我想让用户有机会自己定义格式字符串。

例如:

custom_type v = 10.0;
std::cout << fmt::format("{}", v) << std::endl; // 10
std::cout << fmt::format("{:+f}", v) << std::endl; // 10.000000

我该怎么做?

目前,当我设置自定义格式字符串时,我得到了

 what():  unknown format specifier

最佳答案

最简单的解决方案是继承formatter<custom_type>来自 formatter<double> :

template <> struct fmt::formatter<custom_type> : formatter<double> {
auto format(custom_type c, format_context& ctx) {
return formatter<double>::format(c.value, ctx);
}
};

https://godbolt.org/z/6AHCOJ

关于c++ - FMT C++ 库 : allow user to set format specifiers for custom type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56220269/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com