42seoul/projects

[CPP Module] 07

2024. 3. 13. 15:21

C++ templates

https://jun-13.tistory.com/148

 

[C++] templates

C++ templates ์ฝ”๋“œ์˜ ์ผ๋ฐ˜ํ™”์™€ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ // templates function template T add(T a, T b) { return a + b; } int main() { // intํ˜• ์ธ์ˆ˜๋ฅผ ๊ฐ–๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ std::cout

moaoh.dev


Exercise 00: Start with a few functions

what is templates??

// templates function
template <typename T>
T add(T a, T b) {
    return a + b;
}

int main() {
    // intํ˜• ์ธ์ˆ˜๋ฅผ ๊ฐ–๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ
    std::cout << add(5, 3) << std::endl;

    // doubleํ˜• ์ธ์ˆ˜๋ฅผ ๊ฐ–๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ
    std::cout << add(3.14, 2.71) << std::endl;
	
    return 0;
}

์œ„์™€ ๊ฐ™์€ ํ˜•์‹์ฒ˜๋Ÿผ template <typename T> ์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋– ํ•œ ํƒ€์ž…์ด๋“  ์œ ๋™์ ์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋กœ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ template๋ผ๋Š” ๊ฐœ๋…์„ ์•Œ์•„๋ณด๊ณ  ์‚ฌ์šฉํ•ด๋ณด๋Š” ๊ณผ์ œ


Exercise 01: Iter

template <typename T>
void print(T a, T b) {
    std::cout << "a :" << a << std::endl;
    std::cout << "b :" << b << std::endl;
}

int main() {
    print(5, "hello"); // error
    return 0;
}

์œ„์™€ ๊ฐ™์ด print(5, โ€œhelloโ€) ํ˜•์‹์œผ๋กœ ํ•˜๋‚˜๋Š” int ํ•˜๋‚˜๋Š” str ๋กœ ์ถœ๋ ฅ์„ ํ•˜๊ณ  ์‹ถ์„๋•Œ template์ด๋ผ๊ณ  ๋ฐ”๋กœ ๋Œ€์ž…์„ ํ•ด๋ฒ„๋ฆฌ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ์„ ํ•ด๋ฒ„๋ฆฐ๋‹ค.

๊ทธ ์ด์œ ๋Š” ํ•˜๋‚˜์˜ typename์€ ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ์ด ๋˜๋Š”๋ฐ ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ• ๋ ค๋ฉด

template <typename T, typename U>
void print(T a, U b) {
    std::cout << "a :" << a << std::endl;
    std::cout << "b :" << b << std::endl;
}

int main() {
    print(5, "hello"); // OK!
    return 0;
}

template์˜ typename์„ ์ถ”๊ฐ€ํ•ด์„œ ์„ค์ •์„ ํ•ด์ฃผ๋ฉด ์ถ”๊ฐ€ํ•œ ๊ฐœ์ˆ˜๋งŒํผ ๋‹ค์–‘ํ•œ type์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

ํ•ด๋‹น ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ์ œ์˜ ์ ‘๊ทผํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.


Exercise 02: Mutated abomination

ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” ์šฐ์„ ์ ์œผ๋กœ main๋ฌธ์ด ์ฃผ์–ด์ง€๊ณ  ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„๋•Œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘์„ ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ๋‚˜์™€์•ผํ•œ๋‹ค.

*.tpp ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” ์ฒ˜์Œ๋ณด๋Š” tpp๋ผ๋Š” ํ™•์žฅ์ž์˜ ํŒŒ์ผ์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š”๋ฐ ์ด ํŒŒ์ผ์ด ๋ฌด์—‡์ธ์ง€ ์ฐพ์•„๋ณด๋‹ˆ ๋ณดํ†ต *.hpp์— ์„ ์–ธ์ด ๋˜์–ด์žˆ๋Š” class๋ฅผ *.cpp์— ์˜ฎ๊ฒจ์„œ ์„ ์–ธ๊ณผ ์ •์˜๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ.

template์˜ ๊ฒฝ์šฐ์—๋Š” *.cpp๋กœ ๋ถ„๋ฆฌ๋ฅผ ์‹œ๋„ํ•  ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์‹œ์— ์ด๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ธ์‹ํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ *.tpp๋ผ๋Š” ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

int *a = new int();

int* a = new int[10];

์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ *์ธ ๊ฐ’์— ๋ฐฐ์—ด์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

ex02์—์„œ T *array ํ˜•์‹์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋ฏ€๋กœ T array = new T[size]; ํ˜•์‹์œผ๋กœ ํ• ๋‹น์„ ํ•˜์—ฌ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

int *a = ์ƒˆ๋กœ์šด int();
 
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'42seoul > projects' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CPP Module] 08  (0) 2024.03.13
[C++] templates  (0) 2024.03.13
[CPP Module] 06  (0) 2024.03.13
[C++] casts  (0) 2024.03.13
[CPP Module] 05  (0) 2024.03.13
  1. C++ templates
  2. Exercise 00: Start with a few functions
  3. what is templates??
  4. Exercise 01: Iter
  5. Exercise 02: Mutated abomination
  6. int *a = new int();
moaoh
moaoh
๋‚˜์˜ ์„ฑ์žฅ ์ผ๊ธฐ.
moaoh
๐Ÿถ ๐Ÿพ
moaoh
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • Github
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • Algorithm
      • ๊ฐœ๋…์ •๋ฆฌ
      • ๋ฌธ์ œํ’€์ด
    • 42seoul
      • projects
    • CS
    • programming language
      • C++
      • Javascript
      • Go
      • Python
      • Front-end
      • Java
    • Java Spring
    • git
    • ์ผ์ƒ
      • ์ฑ… ์ฝ๊ธฐ

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ
moaoh
[CPP Module] 07
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.