1. C++ / Говнокод #28140

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    #include <iostream>
    #include <string_view>
    #include <source_location>
     
    void log(const std::string_view message,
             const std::source_location location = 
                   std::source_location::current())
    {
        std::cout << "file: "
                  << location.file_name() << "("
                  << location.line() << ":"
                  << location.column() << ") `"
                  << location.function_name() << "`: "
                  << message << '\n';
    }
     
    template <typename T> void fun(T x)
    {
        log(x);
    }
     
    int main(int, char*[])
    {
        log("Hello world!");
        fun("Hello C++20!");
    }
    
    file: main.cpp(23:8) `int main(int, char**)`: Hello world!
    file: main.cpp(18:8) `void fun(T) [with T = const char*]`: Hello C++20!

    Previously, functions that desire to obtain this information about the call site (for logging, testing, or debugging purposes) must use macros so that predefined macros like __LINE__ and __FILE__ are expanded in the context of the caller. The source_location class provides a better alternative.

    Запостил: kcalbCube, 27 Апреля 2022

    Комментарии (5) RSS

    • vanished
      Ответить
    • А почему колонка 8? не могу понять логику.
      Ответить
      • Видимо, позиция открывающих скобок, в которых «std::source_location::current()» выполнился (для быдла не работавших с крестами — дефолтные значения аргументов подставляются в места вызова).
        Ответить
    • о, можно аспетики нагавнять
      Ответить
    • PRETTY_FUNC всё ещё ID, хотя казалось бы...
      Ответить

    Добавить комментарий