[C++] C++20: Concept

Concept์€ ์ œ๋„ˆ๋ฆญ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์— ์ œ์•ฝ์‚ฌํ•ญ์„ ๊ฑธ์–ด์ค„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๊ธฐ์กด C++ ํ…œํ”Œ๋ฆฟ ๊ธฐ๋Šฅ์€ ์ธ์ฒด๊ณตํ•™์ ์œผ๋กœ๋Š” ๋งŽ์ด ๋ถ€์กฑํ–ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋“ค์–ด๊ฐ€์„œ๋Š” ์•ˆ๋˜๋Š” ํƒ€์ž…์ด ๋“ค์–ด๊ฐ€๋ฉด 5์ฒœ์ค„์”ฉ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋„์šฐ๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด ๊ธฐ๋Šฅ์œผ๋กœ ๊ทธ๋Ÿฐ ๋ถˆํŽธํ•จ์€ ์ข€ ๋œ์–ด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.




Concept ์ •์˜ํ•˜๊ธฐ

์šฐ์„  ์ปจ์…‰์„ ํ†ตํ•ด ์ œ์•ฝ์‚ฌํ•ญ์„ ์ •์˜ํ•œ๋‹ค.

์ปจ์…‰ ์ •์˜ ์‹ ํƒ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

template <ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜...>
concept ์ปจ์…‰๋ช… = boolean ์ƒ์ˆ˜ํ‘œํ˜„์‹

์—ฌ๊ธฐ์„œ ์˜ค๋ฅธ์ชฝ์˜ boolean์‹์€ ์ƒ์ˆ˜๋‚˜ ์ƒ์ˆ˜ํ‘œํ˜„์‹๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
๊ทธ๋ž˜์„œ sizeof๋‚˜ ์ƒ์ˆ˜๊ณ„์‚ฐ์‹, TMP๋ฅผ ์ด์šฉํ•œ ์ฒ˜๋ฆฌ ์ •๋„๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋ž˜์„œ type_traits ํ—ค๋”๋ฅผ ์“ธ ์ผ์ด ๋งŽ์•„์งˆ ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ๋ถ€ํ˜ธ์—†๋Š” ์ •์ˆ˜๋งŒ ๋ฐ›๋Š” ์ปจ์…‰์„ ์ •์˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

is_unsigned๋Š” type_trait์˜ ๋ถ€ํ˜ธํŒ๋ณ„๊ธฐ๋Šฅ์ด๋‹ค.




requires๋กœ ์ปจ์…‰ ์ ์šฉํ•˜๊ธฐ

๊ทธ๋Ÿผ ์ด์ œ ์ € ์ปจ์…‰์„ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ œ์•ฝ์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค.
์‚ฌ์šฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค.
ํ…œํ”Œ๋ฆฟ ์ •์˜ ๋ฐ”๋กœ ์˜ค๋ฅธํŽธ์— requires๋กœ ์ปจ์…‰์„ ๊ฑธ์–ด์„œ ๊ฒ€์ฆํ•  ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋ฉด ๋์ด๋‹ค.

๊ทธ๋Ÿผ ์ œ์•ฝ์‚ฌํ•ญ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ปดํŒŒ์ผ์ด ์ž˜ ๋˜์ง€๋งŒ

์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰๋Š”๋‹ค.




์ฐธ์กฐ
https://kukuta.tistory.com/252