С++ правильное использование 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;
}

0 ответов

Другие вопросы по тегам