C++ named requirements: CharTraits
CharTraits ๋ ์ฃผ์ด์ง ๋ฌธ์ ํ์ ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ๋ฐ ๋ฌธ์์ด ์ฐ์ฐ์ ์ถ์ํํ๋ traits ํด๋์ค์ ๋๋ค. ๋๋ถ๋ถ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์ด ๋ฐ ์ ์ถ๋ ฅ ํด๋์ค๋ค์ ํด๋น ๋ฌธ์ ํ ํ๋ฆฟ ํ์ ๋งค๊ฐ๋ณ์์ ํจ๊ป CharTraits ํ ํ๋ฆฟ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์๊ตฌํฉ๋๋ค.
๋ชฉ์ฐจ |
์๊ตฌ์ฌํญ
์๋์ ๋์ด๋ CharTraits ์ฐ์ฐ ์ค ์ด๋ค ๊ฒ๋ ์์ธ๋ฅผ ๋ฐ์์์ผ์๋ ์ ๋ฉ๋๋ค.
์ฃผ์ด์ง
-
CharT, ๋ฌธ์ ํ์ -
X,CharTํ์ ์ ๋ํ CharTraits ํ์ -
c
,
d
,
CharTํ์ ์ ๊ฐ๋ค - p , q , const CharT * ํ์ ์ ๊ฐ๋ค
-
s
,
CharT*ํ์ ์ ๊ฐ - n , i , j , std::size_t ํ์ ์ ๊ฐ๋ค
-
e
,
f
,
X::int_typeํ์ ์ ๊ฐ๋ค -
pos
,
X::pos_typeํ์ ์ ๊ฐ -
state
,
X::state_typeํ์ ์ ๊ฐ -
r
,
CharTํ์ ์ lvalue
ํ์
| ํ์ | ์๋ฏธ |
|---|---|
X::char_type
|
CharT
|
X::int_type
|
X::char_type
์ ๋ชจ๋ ์ ํจํ ๊ฐ๊ณผ
X
::
eof
(
)
๋ฅผ ํฌํจํ ์ ์๋ ํ์
|
X::off_type
|
X
๊ฐ ์
์ถ๋ ฅ ํด๋์ค์ traits ํ
ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ๋ ๋
std::streamoff
๊ฐ ์๋ ๊ฒฝ์ฐ ๊ตฌํ ์ ์ ๋์์ ์ ๋ฐํจ
|
X::pos_type
|
|
X::state_type
|
Destructible , CopyAssignable , CopyConstructible , DefaultConstructible |
ํํ์
| ํํ์ | ๋ฐํ ํ์ | ์๋ฏธ๋ก | ๋ณต์ก๋ |
|---|---|---|---|
| X :: eq ( c, d ) | bool | ๋ฐํ๊ฐ: c ๊ฐ d ์ ๋๋ฑํ๊ฒ ์ฒ๋ฆฌ๋์ด์ผ ํ๋์ง ์ฌ๋ถ | ์์ |
| X :: lt ( c, d ) | bool | ๋ฐํ๊ฐ: c ๊ฐ d ๋ณด๋ค ์์ ๊ฒ์ผ๋ก ์ฒ๋ฆฌ๋๋์ง ์ฌ๋ถ | ์์ ์๊ฐ |
| X :: compare ( p, q, n ) | int |
๋ฐํ๊ฐ:
|
์ ํ ์๊ฐ |
| X :: length ( p ) | std::size_t | ๋ฐํ๊ฐ: X :: eq ( p [ i ] , CharT ( ) ) ๊ฐ true ์ธ ๊ฐ์ฅ ์์ i | ์ ํ ์๊ฐ |
| X :: find ( p, n, c ) | const X :: char_type * |
๋ฐํ๊ฐ:
|
์ ํ ์๊ฐ |
| X :: move ( s, p, n ) |
X::char_type*
|
|
์ ํ(Linear) |
| X :: copy ( s, p, n ) |
X::char_type*
|
|
์ ํ |
| X :: assign ( r, d ) | (์ฌ์ฉ๋์ง ์์) | r = d ๋ฅผ ํ ๋นํจ | ์์ |
| X :: assign ( s, n, c ) |
X::char_type*
|
|
์ ํ(Linear) |
| X :: not_eof ( e ) |
X::int_type
|
๋ฐํ๊ฐ:
|
์์ |
| X :: to_char_type ( e ) |
X::char_type
|
๋ฐํ๊ฐ:
|
์์ |
| X :: to_int_type ( c ) |
X::int_type
|
๋ฐํ๊ฐ:
e
,
X::to_char_type
์
X::eq_int_type
์ ์ ์์ ์ํด ์ ์ฝ๋๋ ์ด๋ค ๊ฐ
|
์์ |
| X :: eq_int_type ( e, f ) | bool |
|
์์ ์๊ฐ |
| X :: eof ( ) |
X::int_type
|
๋ฐํ๊ฐ: ๋ชจ๋ ๊ฐ c ์ ๋ํด X :: eq_int_type ( e, X :: to_int_type ( c ) ) ๊ฐ false ์ธ ๊ฐ e | ์์ |
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
CharTraits ๋ ๋ค์๊ณผ ๊ฐ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค ํ ํ๋ฆฟ์์ ํ ํ๋ฆฟ ํ์ ๋งค๊ฐ๋ณ์๋ก ์๊ตฌ๋ฉ๋๋ค:
๋ฌธ์์ด |
|
|
๋ฌธ์ ์ํ์ค๋ฅผ ์ ์ฅํ๊ณ ์กฐ์ํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
(C++17)
|
์ฝ๊ธฐ ์ ์ฉ ๋ฌธ์์ด ๋ทฐ
(ํด๋์ค ํ ํ๋ฆฟ) |
์คํธ๋ฆผ |
|
|
์์์ ์คํธ๋ฆผ ๋ฒํผ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
์ฃผ์ด์ง ์ถ์ ์ฅ์น(
std::basic_streambuf
)๋ฅผ ๊ฐ์ธ๊ณ
๊ณ ์์ค ์ ๋ ฅ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ (ํด๋์ค ํ ํ๋ฆฟ) |
|
|
๊ณ ์์ค ํ์ผ ์คํธ๋ฆผ ์
๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
๊ณ ์์ค ๋ฌธ์์ด ์คํธ๋ฆผ ์
๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
(C++23)
|
๊ณ ์ ๋ฌธ์ ๋ฒํผ ์
๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
์ฃผ์ด์ง ์ถ์ ์ฅ์น(
std::basic_streambuf
)๋ฅผ ๊ฐ์ธ๊ณ
๊ณ ์์ค ์ถ๋ ฅ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค (ํด๋์ค ํ ํ๋ฆฟ) |
|
|
๊ณ ์์ค ํ์ผ ์คํธ๋ฆผ ์ถ๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
๊ณ ์์ค ๋ฌธ์์ด ์คํธ๋ฆผ ์ถ๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
(C++20)
|
๋๊ธฐํ๋ ์ถ๋ ฅ ์คํธ๋ฆผ ๋ํผ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
(C++23)
|
๊ณ ์ ๋ ๋ฌธ์ ๋ฒํผ ์ถ๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
์ฃผ์ด์ง ์ถ์ ์ฅ์น(
std::basic_streambuf
)๋ฅผ ๋ํํ๊ณ
๊ณ ์์ค ์ ์ถ๋ ฅ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ (ํด๋์ค ํ ํ๋ฆฟ) |
|
|
๊ณ ์์ค ํ์ผ ์คํธ๋ฆผ ์
์ถ๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
๊ณ ์์ค ๋ฌธ์์ด ์คํธ๋ฆผ ์
์ถ๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
(C++23)
|
๊ณ ์ ๋ ๋ฌธ์ ๋ฒํผ ์
๋ ฅ/์ถ๋ ฅ ์ฐ์ฐ์ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
์คํธ๋ฆผ ๋ฐ๋ณต์ |
|
|
std::basic_istream
์์ ์ฝ์ด๋ค์ด๋ ์
๋ ฅ ๋ฐ๋ณต์
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
std::basic_ostream์ ์ฐ๊ธฐ ์์
์ ์ํํ๋
std::basic_ostream
์ถ๋ ฅ ๋ฐ๋ณต์
(ํด๋์ค ํ ํ๋ฆฟ) |
|
์คํธ๋ฆผ ๋ฒํผ |
|
|
์์ ์ฅ์น๋ฅผ ์ถ์ํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
์์ ํ์ผ ์ฅ์น ๊ตฌํ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
์์ ๋ฌธ์์ด ์ฅ์น๋ฅผ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
(C++20)
|
๋๊ธฐํ๋ ์ถ๋ ฅ ์ฅ์น ๋ํผ
(ํด๋์ค ํ ํ๋ฆฟ) |
|
(C++23)
|
์์ ๊ณ ์ ๋ฌธ์ ๋ฒํผ ์ฅ์น๋ฅผ ๊ตฌํํจ
(ํด๋์ค ํ ํ๋ฆฟ) |
์คํธ๋ฆผ ๋ฒํผ ๋ฐ๋ณต์ |
|
|
std::basic_streambuf
์์ ์ฝ์ด๋ค์ด๋
์
๋ ฅ ๋ฐ๋ณต์
(ํด๋์ค ํ ํ๋ฆฟ) |
|
|
std::basic_streambuf
์ ๊ธฐ๋กํ๋ ์ถ๋ ฅ ๋ฐ๋ณต์
(ํด๋์ค ํ ํ๋ฆฟ) |
|
CharTraits
๋ ๋ค์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ช
์์ ํน์ํ์ ์ํด ์ถฉ์กฑ๋ฉ๋๋ค:
std::char_traits
:
|
template
<>
class
char_traits
<
char
>
;
template
<>
class
char_traits
<
wchar_t
>
;
|
(C++20๋ถํฐ) (C++11๋ถํฐ) (C++11๋ถํฐ) |
|
๊ฒฐํจ ๋ณด๊ณ ์
๋ค์์ ๋์ ๋ณ๊ฒฝ ๊ฒฐํจ ๋ณด๊ณ ์๋ค์ ์ด์ ์ ๋ฐํ๋ C++ ํ์ค์ ์๊ธ ์ ์ฉ๋์์ต๋๋ค.
| DR | ์ ์ฉ ๋์ | ๊ฒ์๋ ๋์ | ์์ ๋ ๋์ |
|---|---|---|---|
| LWG 335 | C++98 |
assign
์ ์ดํญ ์ค๋ฒ๋ก๋์ ๋ํ ์๊ตฌ์ฌํญ์ด
rvalue์ ๋ํ ํ ๋น์ ๋ฐฉ์งํ์ง ์์ |
์ฒซ ๋ฒ์งธ ์ธ์๋
lvalue๋ง ๊ฐ๋ฅํจ |
| LWG 352 | C++98 |
X::state_type
์ด
CopyConstructible ๋ง ์๊ตฌ๋จ |
CopyAssignable
๊ณผ
DefaultConstructible ๋ ์๊ตฌ๋จ |
| LWG 3085 | C++98 |
X
::
copy
(
s, p, n
)
๊ฐ
p
๊ฐ
[
s
,
s
+
n
)
์ ์์์ ์๊ตฌ๋ง ํจ (๋๋ฌด ์ฝํจ)
[1]
|
[
p
,
p
+
n
)
๊ณผ
[
s
,
s
+
n
)
์ด ๊ฒน์น์ง ์์์ผ ํจ์ ์๊ตฌ
|
-
โ
[p,p + n)์[s,s + n)๊ฐ ๊ฒน์น ์ ์๋ ๊ฒฝ์ฐ, std::memcpy ๋ฅผ ์ฌ์ฉํ์ฌX::copy๋ฅผ ๊ตฌํํ๋ฉด ์ด ๊ฒฝ์ฐ ์ ์๋์ง ์์ ๋์์ด ๋ฐ์ํฉ๋๋ค.