Итак, я создаю игровой движок в соответствии с руководством 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 specialization.
Это единственная ошибка, и не указано, какая из них вызывает эту ошибку, а также какой тип не может быть отформатирован.
РЕДАКТИРОВАТЬ:< /p>
Я создал это, в котором хотел вернуть это как формат для типа события, и поместил его в свой файл Log.cpp, который импортируется в каждый файл, который использует событие. Возникает та же ошибка
struct fmt::formatter {
constexpr auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
return ctx.end();
}
template
auto format(const Pluton::Event& input, FormatContext& ctx) -> decltype(ctx.out()) {
return format_to(ctx.out(),
"(Name:{})",
input.GetName() {});
}
};
Подробнее здесь: https://stackoverflow.com/questions/743 ... ormatter-t