[C++] 템플릿(Template) 2: 클래스 템플릿
클래스 템플릿
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
클래스 템플릿
#include <iostream> using namespace std; class RandomBox{ public: int GetRandomData() { int idx = rand() % 10; return _data[idx]; } public: int _data[10]; }; int main(){ srand(static_cast<unsigned int>(time(nullptr))); RandomBox rb1; for (int i = 0; i < 10; i++) { rb1._data[i] = i; } int value1 = rb1.GetRandomData(); cout << value1 << endl; RandomBox rb2; for (int i = 0; i < 10; i++) { rb2._data[i] = i; } int value2 = rb2.GetRandomData(); cout << value2 << endl; return 0; }

클래스 템플릿: 예제1
#include <iostream> using namespace std; template<typename T> class RandomBox{ public: T GetRandomData() { int idx = rand() % 10; return _data[idx]; } public: T _data[10]; }; int main(){ srand(static_cast<unsigned int>(time(nullptr))); RandomBox<int> rb1; for (int i = 0; i < 10; i++) { rb1._data[i] = i; } int value1 = rb1.GetRandomData(); cout << value1 << endl; RandomBox<float> rb2; for (int i = 0; i < 10; i++) { rb2._data[i] = i + 0.5f; } float value2 = rb2.GetRandomData(); cout << value2 << endl; return 0; }

#include <iostream> using namespace std; template<typename T, int SIZE> class RandomBox{ public: T GetRandomData() { int idx = rand() % SIZE; return _data[idx]; } public: T _data[SIZE]; }; int main(){ srand(static_cast<unsigned int>(time(nullptr))); RandomBox<int, 10> rb1; for (int i = 0; i < 10; i++) { rb1._data[i] = i; } int value1 = rb1.GetRandomData(); cout << value1 << endl; RandomBox<int, 20> rb2; for (int i = 0; i < 20; i++) { rb2._data[i] = i + 0.5f; } int value2 = rb2.GetRandomData(); cout << value2 << endl; return 0; }

템플릿 특수화
#include <iostream> using namespace std; template<typename T, int SIZE> 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[10]; }; int main(){ srand(static_cast<unsigned int>(time(nullptr))); 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 + 0.5f; } double value2 = rb2.GetRandomData(); cout << value2 << endl; return 0; }

클래스 템플릿: 예제 2
#include <iostream> using namespace std; template<typename T, typename U> class TemplateClass { private: T Num1; U Num2; public: TemplateClass() { Num1 = 0; Num2 = 0; }; TemplateClass(T num1, U num2) { Num1 = num1; Num2 = num2; } void Print() const { cout << Num1 << " : " << Num2 << endl; } T Add(const T num1, const U num2) { return num1 + num2; } // 클래스 안에 템플릿 함수를 선언합니다. // 해당 형식은 클래스를 선언할 때 클래스의 T 형식으로 // 전환되지 않습니다. template<typename T> T Sub(const T num1, const T num2) { return num1 - num2; } }; int main() { TemplateClass<int, float> sample1(10, 20.14f); sample1.Print(); cout << sample1.Add(30, 40) << endl; cout << sample1.Sub<double>(1.5, 0.5) << endl; cout << sample1.Sub<int>(30, 10) << endl; return 0; }

'⭐ Programming > C++' 카테고리의 다른 글
[C++]L-value와 R-value, R-value reference (0) | 2022.04.24 |
---|---|
[C++] 콜백 함수 (Callback function) (0) | 2022.04.17 |
[C++] 템플릿(Template) 1: 함수 템플릿 (0) | 2022.04.16 |
[C++] 함수 객체 (0) | 2022.04.16 |
[C++] 함수 포인터 2 (0) | 2022.04.16 |
댓글
이 글 공유하기
다른 글
-
[C++]L-value와 R-value, R-value reference
[C++]L-value와 R-value, R-value reference
2022.04.24L-value vs. R-value 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! L value L value : 단일식을 넘어서 계속 지속되는 개체 메모리 위치를 참조. 주소가 있는 애들. 대개 식별자. const가 붙으면 수정할 수 없는 l-value가 된다. R value R value : L value가 아닌 나머지 (임시 값, 열거형, 람다, i++ 등) 표현식 종료 후 없어지는임시적인 값 리터럴 임시변수 임시객체. const 로 L value를 R value로 바꿀 수 있다. L value Reference vs. R valu… -
[C++] 콜백 함수 (Callback function)
[C++] 콜백 함수 (Callback function)
2022.04.17콜백 함수 (Callback function) 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 콜백 함수 함수 포인터 + 함수 객체 + 템플릿 콜백 (Callback) : 다시 호출하다? 역으로 호출하다? 게임을 만들 때 이런 콜백의 개념이 자주 등장한다. ex) MoveTask 실습 등 어떤 상황이 일어나면 -> 이 기능을 호출해줘 ex) UI 스킬 버튼을 누르면 -> 스킬을 쓰는 함수를 호출 콜백 함수의 단점 함수 포인터는 상태를 저장할 수 없다. 함수 포인터로 콜백 함수를 만드는건 간단한 일이지만 상태를 저장할 수 없다는 단… -
[C++] 템플릿(Template) 1: 함수 템플릿
[C++] 템플릿(Template) 1: 함수 템플릿
2022.04.16 -
[C++] 함수 객체
[C++] 함수 객체
2022.04.16
댓글을 사용할 수 없습니다.