c++ 无法设置参数的格式,若要使类型T可格式化,请提供一个格式< T>

hgc7kmma  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(155)

因此,我创建一个游戏引擎根据thecherno的教程,我添加GLFW错误处理(这是c++),我不能弄清楚在哪里以及如何添加SPDLOG格式化程序这里是我的Log.h

#define PL_CORE_TRACE(...)      ::Pluton::Log::GetCoreLogger()->trace(__VA_ARGS__)
#define PL_CORE_WARN(...)       ::Pluton::Log::GetCoreLogger()->warn(__VA_ARGS__)
#define PL_CORE_INFO(...)       ::Pluton::Log::GetCoreLogger()->info(__VA_ARGS__)
#define PL_CORE_ERROR(...)      ::Pluton::Log::GetCoreLogger()->error(__VA_ARGS__)
#define PL_CORE_FATAL(...)      ::Pluton::Log::GetCoreLogger()->fatal(__VA_ARGS__)

__VA_ARGS__是指定给记录器的所有参数
我绑定了一个OnEvent函数,它的日志记录如下:

void Application::OnEvent(Event& e) {
    PL_CORE_INFO("{0}", e);
}

我将glfwSetErrorCallback事件绑定到GLFWErrorCallback函数,如下所示:

static void GLFWErrorCallback(int error, const char* description) {
    PL_CORE_ERROR("GLFW Error ({0}): {1}",error,description);
}
//this is a snippit in Application::Init() which initializes GLFW
    if (!s_GLFWInitialized) {
                int success = glfwInit();
                PL_CORE_ASSERT("GLFW NOT INITIALIZED");
                glfwSetErrorCallback(GLFWErrorCallback);
                s_GLFWInitialized = true;
            }

我一直收到错误消息:

Cannot format an argument. To make type T formattable provide a formatter<T> specialization.

这是唯一的错误,而且不会指定是哪一个造成这个错误,以及哪一个型别无法格式化。
编辑:
我创建了这个,我想在其中返回Event类型的格式,我把它放在我的Log.cpp文件中,该文件被导入到每个使用event的文件中。

struct fmt::formatter<Pluton::Event> {
    constexpr auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
        return ctx.end();
    }

    template <typename FormatContext>
    auto format(const Pluton::Event& input, FormatContext& ctx) -> decltype(ctx.out()) {
        return format_to(ctx.out(),
            "(Name:{})",
            input.GetName() {});
    }

};
ajsxfq5m

ajsxfq5m1#

#include <spdlog/fmt/ostr.h>添加到Log.h文件。通过此spdlog,将能够在Event.h中使用operator<<

相关问题