我有一个自定义类型,例如:
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
format
中构建格式字符串。只需重用您所需的格式化程序的专业化即可。 - vitaut