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_traits는 std::string, std::string_view, std::basic_istream 등 문자 기반 표준 타입들이 문자 연산을 공통 인터페이스로 처리하게 하는 기반이에요.