오븐 노트

[C++] 템플릿 기초 #2 본문

Develop/C++

[C++] 템플릿 기초 #2

오 븐 2023. 5. 3. 15:52
#include <iostream>
using namespace std;

// typename T(name)를 붙이면 어떤 타입도 다 넣을 수 있음
// 무조건 typename을 붙여야 하는 것은 아니다
// template<> 안에 들어가는건 [골라줘야 하는 목록]이라고 볼 수 있음
template<typename T, int SIZE = 10>
class RandomBox
{
public:
    T GetRandomData()
    {
        int idx = rand() % SIZE;
        return _data[idx];
    }

public:
    T _data[SIZE];
};

// 템플릿 특수화
template<int SIZE>
class RandomBox<double, SIZE>
{
public:
    double GetRandomData()
    {
        cout << "RandomBox Double" << endl;
        int idx = rand() % SIZE;
        return _data[idx];
    }

public:
    double _data[SIZE];
};


int main()
{
    srand(static_cast<unsigned int>(time(nullptr)));

    // 템플릿 : 함수나 클래스를 찍어내는 틀
    // 1) 함수 템플릿
    // 2) 클래스 템플릿

    RandomBox<int, 10> rb1;
    for (int i = 0; i < 10; i++)
    {
        rb1._data[i] = i;
    }
    int value1 = rb1.GetRandomData();
    cout << value1 << endl;

    RandomBox<double, 20> rb2;
    for (int i = 0; i < 20; i++)
    {
        rb2._data[i] = i;
    }
    double value2 = rb2.GetRandomData();
    cout << value2 << endl;

    return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

'Develop > C++' 카테고리의 다른 글

[C++] vector #1  (0) 2023.05.18
[C++] 콜백 함수  (0) 2023.05.18
[C++] 템플릿 기초 #1  (0) 2023.05.03
[C++] 함수 객체  (0) 2023.05.01
[C++] 함수 포인터 #2  (0) 2023.05.01