Предоставьте пользовательскую FMT :: Formatter для типов сообщений ProtobufC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Предоставьте пользовательскую FMT :: Formatter для типов сообщений Protobuf

Сообщение Anonymous »

У меня есть несколько классов сообщений Protobuf, которые я хотел бы напечатать с помощью fmtlib. Например, у меня есть сообщение TaskStatus, где TaskStatus получен из Google :: Protobuf :: Message. Я использую следующий код для этого: < /p>
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:1777:29: required from ?constexpr fmt::v9::detail::value fmt::v9::detail::make_arg(T&&) [with bool IS_PACKED = true; Context = fmt::v9::basic_format_context; type = fmt::v9::detail::type::custom_type; T = const TaskStatus&; typename std::enable_if::type = 0]?
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h:1901:77: required from ?constexpr fmt::v9::format_arg_store::format_arg_store(T&& ...) [with T = {const TaskStatus&}; Context = fmt::v9::basic_format_context; Args = {TaskStatus}]?
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h:1918:31: required from ?constexpr fmt::v9::format_arg_store fmt::v9::make_format_args(Args&& ...) [with Context = basic_format_context; Args = {const TaskStatus&}]?
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h:3294:44: required from ?void fmt::v9::print(format_string, T&& ...) [with T = {const TaskStatus&}; format_string = basic_format_string]?
PsDemo/PsDemo_Diagnostics/TaskServer.cpp:421:19: required from here
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h:1757:7: error: static assertion failed: Cannot format an argument. To make type T formattable provide a formatter specialization: https://fmt.dev/latest/api.html#udt
1757 | formattable,
| ^~~~~~~~~~~
ThirdParty/spdlog/include/spdlog/fmt/bundled/core.h:1757:7: note: ?formattable? evaluates to false
< /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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Предоставьте пользовательскую FMT :: Formatter для типов сообщений Protobuf [дублировать]
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Предоставьте пользовательскую FMT :: Formatter для типов сообщений Protobuf
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский класс fmt::formatter для неконстантного аргумента
    Anonymous » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Kpathsea: при запуске mktexfmt xelatex.fmt не удается найти файл формата `xelatex.fmt'
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Kpathsea: при запуске mktexfmt xelatex.fmt не удается найти файл формата `xelatex.fmt'
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»