티스토리 뷰
1. 클래스 템플릿
2. 클래스 템플릿 특수화
3. 클래스 템플릿 다중 인자
클래스 템플릿
template<typename T>
class RandomBox
{
public:
T GetRandomData()
{
int idx = rand() % 10;
return _data[idx];
}
public:
T _data[10];
};
int main()
{
RandomBox<int> rb1;
}
- class 선언 위에 템플릿 선언
- class 내부에서 아직 미정된 타입인 부분에 템플릿 사용
- 인스턴스 생성시, <int> 처럼 타입 지정
클래스 템플릿 특수화
template<typename T>
class RandomBox
{
public:
T GetRandomData()
{
int idx = rand() % 10;
return _data[idx];
}
public:
T _data[10];
};
// 템플릿 특수화 (double일 경우, 밑의 클래스가 호출됨)
template<>
class RandomBox<double> // 템플릿 특수화
{
public:
//타입 double 지정
double GetRandomData()
{
int idx = rand() % 10;
return _data[idx];
}
public:
//타입 double 지정
double _data[10];
};
int main()
{
RandomBax<double> rb2;
}
- "template<>" 으로 템플릿 특수화 선언
- 클래스 옆에 원하는 타입 지정 ( ex) class RandomBox<double> )
- 원하는 타입으로 클래스 생성
클래스 템플릿 다중 인자
template<typename T, int SIZE>
class RandomBox
{
public:
T GetRandomData()
{
int idx = rand() % 10;
return _data[idx];
}
public:
T _data[SIZE];
};
// 템플릿 특수화 (double일 경우, 밑의 클래스가 호출됨)
template<int SIZE> // SIZE는 인자로 사용됨
class RandomBox<double, SIZE> // 템플릿 특수화할경우 T가 double로 지정한 것이므로 <double, SIZE>를 해줘야한다
{
public:
double GetRandomData()
{
int idx = rand() % 10;
return _data[idx];
}
public:
double _data[SIZE];
};
int main()
{
srand(static_cast<unsigned int>(time(nullptr)));
// 타입을 지정 해줘야함 + template 인자값이 있다면 넣어줘야함
RandomBox<int, 10> rb1;
for (int i = 0; i < 10; i++)
{
rb1._data[i] = i;
}
RandomBox<float, 10> rb1;
for (int i = 0; i < 10; i++)
{
rb1._data[i] = i;
}
RandomBox<double, 20> rb1;
for (int i = 0; i < 20; i++)
{
rb1._data[i] = i + 0.5;
}
return 0;
}
- 템플릿으로 사용될 경우, 클래스는 인스턴스 생성시 어떤 타입으로 할지 지정해줘야함
- 템플릿 초기화가 무조건 <>이 아닌, 다중 인자일경우 원하는 타입 제외하고 나머지는 그대로 다시 작성해줘야함
- template<int SIZE>
- class RandomBax<double, SIZE> ...
'프로그래밍 언어 > C++' 카테고리의 다른 글
콜백함수 (함수객체, 템플릿) (0) | 2024.07.05 |
---|---|
Template (함수 템플릿 - c++) (0) | 2024.07.05 |
함수 객체 (C++) (1) | 2024.07.05 |
함수포인터 (C++) (0) | 2024.07.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Spring
- HTML5
- 정렬
- 깊이우선탐색
- 클래스
- Thymeleaf
- 티스토리챌린지
- 타입변환
- 백준
- 우선순위 큐
- 게시판 프로젝트
- 코딩테스트
- JDBC
- 오블완
- 검증
- SQL
- 버블정렬
- 예외처리
- Java
- 이진탐색
- 기술면접
- 게시판
- 포트폴리오
- BFS
- JSON
- DFS
- 알고리즘
- bean
- stack
- db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함