char_traits — std::char_traits

char_traits — std::char_traits

std::char_traits 클래스는 주어진 문자 타입에 대한 기본 문자·문자열 연산을 추상화하는 특성(traits) 클래스 템플릿이에요. <string> 헤더에 있어요.

그 연산 집합은 거의 모든 제네릭 알고리즘이 그 위에서 구현될 수 있을 만큼 정의돼 있어요. 따라서 거의 모든 가능한 문자 타입에 그런 알고리즘을 쓸 수 있어요.

출처: cppreference

본문

// <string> 헤더
template< class CharT >
class char_traits;

주요 멤버 함수

함수 설명
assign(c1, c2) 문자 대입
eq(c1, c2) 문자 비교 (같음)
lt(c1, c2) 문자 비교 (작음)
length(s) 문자열 길이
compare(s1, s2, n) 부분 문자열 비교
find(s, n, c) 문자 탐색
move(dst, src, n) 이동 복사
copy(dst, src, n) 복사
to_int_type(c), to_char_type(i) 문자/정수 변환
eq_int_type, eof() EOF 처리

사용 예

#include <string>

// 문자열 길이 계산 (널 종결)
std::char_traits<char>::length("hello");   // 5

// 문자 비교
bool eq = std::char_traits<char>::eq('a', 'b');   // false

// 문자열 비교
int r = std::char_traits<char>::compare("abc", "abd", 3);  // <0

커스텀 문자 타입 지원

char_traits가 문자 타입 연산을 추상화하므로, basic_string<MyChar>처럼 커스텀 문자 타입에도 문자열 타입을 쓸 수 있어요 — 커스텀 char_traits<MyChar>와 함께.

// 특수 문자 트레이트 예 (대소문자 무시 비교 등)
struct CaseInsensitiveTraits : std::char_traits<char> {
    static bool eq(char a, char b) { return std::toupper(a)==std::toupper(b); }
    static bool lt(char a, char b) { return std::toupper(a)<std::toupper(b); }
    // ...
};

내장 특수화

특수화 문자 타입
std::char_traits<char> char
std::char_traits<wchar_t> wchar_t
std::char_traits<char8_t> UTF-8/16/32
// basic_string은 기본적으로 char_traits 사용
std::string s;   // basic_string<char, char_traits<char>>

char_traitsstd::string, std::string_view, std::basic_istream 등 문자 기반 표준 타입들이 문자 연산을 공통 인터페이스로 처리하게 하는 기반이에요.

더 알아보기 (Learn more)

cppreference