template struct fmt::formatter : formatter
{
// parse is inherited from formatter
auto format(const google::protobuf::Message& message, format_context& ctx) const -> format_context::iterator
{
const auto result = fmt::format("{}", message.DebugString());
return formatter::format(result, ctx);
}
};
< /code>
Но компилятор, похоже, не учитывает этот код. Если я попытаюсь скомпилировать код таким: < /p>
void TaskServer::UpdateStatus(const TaskStatus& status)
{
fmt::print("TaskServer::UpdateStatus(): {}", status) // this is line 421
}
< /code>
Затем я получаю эти сообщения об ошибках: < /p>
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h: In instantiation of ?constexpr fmt::v9::detail::value fmt::v9::detail::make_value(T&&) [with Context = fmt::v9::basic_format_context; T = const TaskStatus&]?:
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h
PsDemo/PsDemo_Diagnostics/TaskServer.cpp:421:19: required from here
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h
1757 | formattable,
| ^~~~~~~~~~~
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h
< /code>
Если я изменяю шаблон FMT :: Formatter для использования TaskStatus вместо Google :: ProTobuf :: Сообщение, тогда он работает нормально. < /p>
template struct fmt::formatter : formatter
{
auto format(const TaskStatus& message, format_context& ctx) const -> format_context::iterator
< /code>
Но у меня есть много разных классов, полученных из Google :: protobuf :: Сообщение, с которым я хотел бы справиться с одной функцией. Есть ли способ получить функцию формата, используя аргумент Google :: Protobuf :: Сообщение для работы для всех полученных классов?
Подробнее здесь: https://stackoverflow.com/questions/794 ... sage-types