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()는 호출 지점의 정보를 담은 객체를 생성한다.
[참고]
반응형
'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 |