char_traits
템플릿 구조체로, 특정 문자 타입에 대한 다양한 문자 특성을 정의합니다.
이 구조체는 'std::basic_string', 'std::basic_ios'를 포함한 여러 iostream 관련 템플릿 클래스에서 사용되어 문자 타입에 따라 적절한 방식으로 문자를 처리할 수 있도록 합니다.
basic_ios: 'ios_base'(모든 스트림 클래스의 최상위 기반 클래스)를 상속받아 문자 타입 관련 기능을 추가한 중간 클래스
문자 타입 요구 사항
'char_traits<CharT>'가 작동하려면 'CharT' 타입은 다음 요구 사항을 만족해야 합니다:
- 명시적 생성자나 소멸자를 필요로 하지 않아야 합니다.
- 기본 생성자, 복사 생성자, 대입 연산자는 평범한 복사여야 합니다.
- 비트 단위 복사가 대입과 동일한 효과를 가져야 합니다.
- char_traits의 모든 멤버 함수는 예외를 던지지 않아야합니다.
공식 문서 ▶ cplusplus
char_traits의 Member types
- char_type : 문자의 실제 타입 (예: 'char', 'wchar_t', 'char8_t', ...)
- int_type : 'char_type'을 포함할 수 있는 정수형 (예: EOF(-1))
- off_type : 스트림 내의 위치 간 차이(오프셋)을 나타내는 타입
- pos_type : 스트림 내의 위치를 나타내는 타입
- state_type : 멀티바이트 문자 변환 시 필요한 상태 정보를 담는 타입
멀티바이트 문자 인코딩에서 다음 문자를 해석하기 위해 필요한 변환 상태 정보를 저장하는 데 사용됩니다.
char_traits의 Member functions
- assign : 문자 하나 또는 문자 배열 전체에 특정 문자를 대입합니다.
- compare : 두 문자 배열의 내용을 사전식으로 비교합니다.
- copy : 문자 배열을 복사합니다. 겹치는 영역이 있으면 동작이 정의되지 않습니다.
- move : 문자 배열을 복사합니다. copy와 달리 겹치는 영역도 안전하게 복사합니다.
- eof : 파일 끝(EOF)을 나타내는 int_type 값을 반환합니다.
- not_eof : 주어진 int_type 값이 eof()와 같으면, 기본 문자(char_type{})로 변환된 값을 반환하고, 아니면 원래 값을 그대로 반환합니다.
- eq : 두 char_type 값이 같은지 비교합니다.
- lt : 왼쪽 char_type 값이 오른쪽보다 작은지 비교합니다.
- eq_int_type : 두 int_type 값이 같은지 비교합니다.
- to_char_type : int_type 값을 char_type으로 변환합니다.
- to_int_type : char_type 값을 int_type으로 변환합니다.
- find : 주어진 문자 배열에서 특정 문자를 검색하고, 포인터를 반환합니다. 찾지 못하면 nullptr을 반환합니다.
- length : null 종료된 문자 배열의 길이를 계산합니다.
간단한 사용 예시
아래는 std::char_traits<char>의 멤버 타입과 멤버 함수를 간단히 사용하는 예시입니다.
#include <iostream>
#include <string>
int main() {
std::char_traits<char>::char_type c1 = 'A';
std::char_traits<char>::char_type c2 = 'A';
if (std::char_traits<char>::eq(c1, c2)) {
std::cout << "문자 같음\n";
}
return 0;
}
출력 ▶ 문자 같음