template

템플릿(template): 물건을 만들 때 사용되는 틀이나 모형을 의미

함수 템플릿(function template): 함수를 찍어내기 위한 형틀

int get_max(int x, int y){
}

// 얘랑
float get_max(float x, float y){
}

얘처럼 여러 타입으로 선언하면 귀찮아

template<typename T>
T get_max(T x, T y)
{
if (x > y) return x;
else return y;
}

typename 대신 <class T> 로 써도 됨

템플릿 함수의 특수화

template <class T>
void increase (T& v){ v+= 1;}

template <> // 특수화 된 부분
void increase(int *& v){ v += 2; }

특수화를 해놓으면 우선권이 있어서 먼저 호출됨 ㅇㅇ

함수 중복

template <class T>
~~~~

template<> // 특수화
~~~

void increase(int *& v) { v += 3; }

오버로딩 한 함수가 제일 우선권을 가짐

템플릿 클래스의 사용

#include <iostream>
using namespace std;

template<class T>
class Box{
    T data;
public:
    Box(){}
    void set(T value) {data = value;}
    T get(){ return data; }
};

int main() {
    Box<int> b1;
    b1.set(100);
    cout << b1.get() << endl;

    Box<double> b2;
    b2.set(3.14);
    cout << b2.get() << endl;

    return 0;
}

두개의 타입 매개 변수

두 개의 데이터를 저장하는 클래스 Box2

#include <iostream>
using namespace std;

template<class T1, class T2>
class Box2{
T1 data1;
T2 data2;
public:
    Box2(){}
    void set1(T1 value) {
        data1 = value;
    }
    void set2(T2 value) {
        data2 = value;
    }
    T1 get1();
    T2 get2();
};

teplate<class T1, class T2>
T1 Box2<T1, T2>::get1(){ return data1; }

teplate<class T1, class T2>
T1 Box2<T1, T2>::get2(){ return data2; }

스택 stack : 후입 선출 구조(last in first out) 구조

가장 최근에 넣은 요소 : top
Stack [top]
아무값도 없으면 : -1 값 가짐

'TIL > [C++ 프로그래밍} TIL' 카테고리의 다른 글

TIL (22.06.05)  (0) 2022.06.05
TIL (22.05.30)  (0) 2022.05.30
TIL (22.05.23)  (0) 2022.05.23
TIL (22.05.18)  (0) 2022.05.18
TIL 22.05.11  (0) 2022.05.11