Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 마법이라고 불러도 좋을까?
- 平井堅
- React.js
- 백준4344번
- 아스키코드로 숫자 넣기
- ㅇ
- 히라이켄
- Official髭男dism
- body
- 백준 8958번
- 백준 11720
- 오버플로우
- 異端なスター
- 정수와 상수
- meta charset=
- 아스키코드
- 십진수 16진수
- HEAD
- 魔法っていっていいかな
- !doctype html
- 자료형
- 문자열숫자를 숫자로
- html
- 십진수 8진수
Archives
- Today
- Total
갓비니
C++ Template : 템플릿, 제너릭 타입 본문
함수 중복 시 (같은 내용이지만 매개변수의 형만 다른 경우) 중복된 함수들을 일반화 시키는 특별한 함수가 필요한데,
이 때 template function (=generic function)을 만들면 된다. (중복함수는 최근에는 쓰이지 않음!)
< 템플릿 함수 작성 방법 2가지 >
① template(템플릿 선언) <class(제너릭 타입 선언) class_name(제너릭 타입 class_name 선언)>
-> ex) template <class T>
② template <typename type_name>
-> ex) template <typename T>
void swap_func(int &a, int &b){ int tmp; tmp = a; a = b; b = tmp; } |
void swap_func(double &a, double &b){ int tmp; tmp = a; a = b; b = tmp; } |
이 둘은 인자의 형만 다를 뿐, 함수가 중복되므로 이렇게 합칠 수 있다.
template <class T> void swap_func(T &a, T &b){ T tmp; tmp = a; a = b; b = tmp; } -> tmp, a, b모두 T 형이네 |
int main(){ int a=10, b=20; swap_func(a,b) ->int형이므로 알아서 계산해준다! } |
< 일반 변수 말고도 각각 다른 자료형의 배열도 가능! >
#include <iostream> using namespace std; template <class T> // 추상적인 형 T선언 (값이 int일지 , double일지, 뭘지 모르는 친구 앞에는 T 쓰기) T add(T data [], int n){ T sum = 0; for (int i=0 ; i<n ; i++){ sum=sum+data[i]; } return sum; } int main(){ int a[] = {1,2,3,4,5}; double b[] = {1.5 ,2.5 ,3.5 ,4.5 ,5.5}; add(a,(sizeof(a)/sizeof(int))); add(b,(sizeof(b)/sizeof(double))); } |
template <class T1, class T2 ... > 더 여러개도 가능하다!!!
이렇게 두 개 이상의 템플릿을 선언하는 경우는,
인자를 두 개 이상 받는데 타입이 다를 경우이다.
template <class T1, class T2> void result(T1 x, T2 y){ cout << "result : " << x <<" , "<< y <<endl ; |
endl="\n"
예 )
template <class T1, class T2>
void new_func(T1 src [], T2 dest[], int n) //이런것도 가능하지만
디폴트 매개변수를 지정하면
void new_func(T1 src [], T2 dest[], int n=5)
< template specialization / 이미 지정한 템플릿을 예외를 재정의하고싶을 때 >
template <class T> T add(T a, T b){ return a+b; } template <> string add<string>(string s1, string s2){ string announce="string은 더하면 합쳐지지롱~"; cout << s1+s2 << endl; return announce; } |
결론 : 그냥 어떤 함수의 매개변수의 자료형이 매번 바뀔 것 같다? -> 그럼 내가 그 함수를 지정해주고 그 함수의 자료형을 직접 T1, T2 등으로 설정해주는 것)
'Programming > C++' 카테고리의 다른 글
C++ STL (Standard Template Library) - 이차원 vector (0) | 2020.07.04 |
---|---|
** C++ STL (Standard Template Library) - vector (가변길이의 배열) (0) | 2020.07.03 |
C++ STL (Standard Template Library) 개념 (0) | 2020.04.27 |
string subscript out of range / C++ 에러 (0) | 2020.04.24 |
[C++ 복습]1. 기초 (cin, cout...) (0) | 2018.01.12 |