С++ правильное использование std::source_location
Я пытаюсь использовать в сочетании с механизмом регистрации. Однако оказывается, что это указывает не на то место.
Для справки ссылка на проводник компилятора https://godbolt.org/z/Wx3har1zG.
Проблема заключалась в том, что я мог найти способ объединить аргументы по умолчанию и аргументы va. Поэтому мне пришлось разделить его на две отдельные функции.
Теперь указывает наlog()
функция, а не источник журнала. Не могли бы вы помочь мне здесь? Как я могу объединитьstd::source_location
и va args (без необходимости оборачивать все это в макросы).
#include <source_location>
#include <string>
#include <string_view>
#include <format>
#include <iostream>
#include <fmt/format.h>
template <typename... Args>
bool log(fmt::format_string<Args...> fmt, Args&&... args);
bool _log(std::string strFormatedDebugMessage, const std::source_location loc = std::source_location::current());
template<typename ...Args>
bool log( fmt::format_string<Args...> fmt, Args&&... args)
{
fmt::basic_string_view<char> asStringView = fmt;
auto asStdStringView = std::string_view(asStringView.data());
const bool bRes = _log(std::string(asStdStringView));
return bRes;
}
bool _log(std::string strFormatedDebugMessage, const std::source_location loc)
{
//for debugging
//this should point to line 43 44. infact it points to line 24
std::cout << "Called from Line "<< loc.line() << std::endl;
std::cout << "Log: " << strFormatedDebugMessage <<std::endl;
//write to the actual hardware => might fail therfore return bool
return true;
}
int main()
{
bool bRes = log("Log with format {} {} value", "Some dummy", 1);
bRes &= log("Log without format args");
std::cout <<"Hello World" << bRes << std::endl;
}