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>
Aber der Compiler scheint diesen Code nicht zu berücksichtigen. Wenn ich versuche, so diesen zu kompilieren: < /p>
void TaskServer::UpdateStatus(const TaskStatus& status)
{
fmt::print("TaskServer::UpdateStatus(): {}", status) // this is line 421
}
< /code>
Dann erhalte ich diese Fehlermeldungen: < /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>
Wenn ich die fmt :: -Formatter -Vorlage ändere, um TaskStatus anstelle von Google :: protobuf :: meldung zu verwenden, dann funktioniert es einwandfrei. < /p>
template struct fmt::formatter : formatter
{
auto format(const TaskStatus& message, format_context& ctx) const -> format_context::iterator
< /code>
Aber ich habe viele verschiedene Klassen, die von Google :: protobuf :: meldung abgeleitet sind, die ich mit der einen Funktion verarbeiten möchte. Gibt es eine Möglichkeit, die Formatfunktion mit dem Argument von Google :: protobuf :: meldung zu erhalten, um für alle abgeleiteten Klassen zu arbeiten?