728x90

1. std::source_location을 이용한 로그 작성

  • 기존 __FILE__, __LINE__ 매크로를 사용한 로그 방식을 개선하고자 추가된 내용이다.

 

2. 사용 방법

void log( std::string_view InMsg, const std::source_location& InLocation = std::source_location::current() )
{
    std::cout << InMsg << InLocation.file_name() << " " << InLocation.line() << std::endl;
}

int main()
{
    // C++ 20에 추가된 std::source_location을 이용한 로그 작성
    log( "Error : " );

    // 기존 __FILE__, __LINE__ 매크로를 이용한 로그 작성
    std::cout << "Error : " << __FILE__ << " " << __LINE__ << std::endl;
}
  • 매크로 방식에서, 호출 지점의 정보를 담은 객체를 사용한 방식으로 개선되었다.
  • std::source_location 클래스는 소스 파일 이름, 행 번호, 열 번호, 함수 이름과 같은 정보를 제공한다.

 

3. std::source_location::current() 정의

_STD_BEGIN
struct source_location {
    _NODISCARD static consteval source_location current(const uint_least32_t _Line_ = __builtin_LINE(),
        const uint_least32_t _Column_ = __builtin_COLUMN(), const char* const _File_ = __builtin_FILE(),
        const char* const _Function_ = __builtin_FUNCTION()) noexcept {
        source_location _Result;
        _Result._Line     = _Line_;
        _Result._Column   = _Column_;
        _Result._File     = _File_;
        _Result._Function = _Function_;
        return _Result;
    }

    _NODISCARD_CTOR constexpr source_location() noexcept = default;

    _NODISCARD constexpr uint_least32_t line() const noexcept {
        return _Line;
    }
    _NODISCARD constexpr uint_least32_t column() const noexcept {
        return _Column;
    }
    _NODISCARD constexpr const char* file_name() const noexcept {
        return _File;
    }
    _NODISCARD constexpr const char* function_name() const noexcept {
        return _Function;
    }
  ...
  ...
 }
  • std::source_location::current()는 호출 지점의 정보를 담은 객체를 생성한다.

 

[참고]

https://en.cppreference.com/w/cpp/utility/source_location

반응형

'C++ > C++ 20' 카테고리의 다른 글

[C++ 20] std::erase_if 를 이용한 요소 삭제  (0) 2022.02.25
[C++ 20] std::span  (0) 2022.02.25
[C++ 20] 템플릿 람다  (0) 2022.02.23
[C++ 20] consteval, constinit 지정자  (0) 2022.02.23
[C++20] 지명 초기화  (0) 2022.02.22

+ Recent posts