//출처는 코드누리 c++ intermediate 강좌 입니다.
//강의를 보고 정리, 안보고 타이핑
"동일한 기능을 하는 코드"를 설계하는 방법은 2가지가 있음.
1. define 전처리기를 사용.
-> 타입을 추론할 수 없음. -> 사용할 타입에 맞게 선언해야 함.
-> 전처리기에서 처리하므로 오류 작성시 오류인지 판단 불가.
2. template, 컴파일러를 사용하는 방법.
-> 컴파일러에 의해 타입을 추론할 수 있음.
: 타입만 다를 뿐, 동일한 기능을 수행하므로
디파인과 템플릿으로 만들어보자.
틀 만들기
하지만 타입을 추론할 수 없으므로, 컴파일러가 타입을 알 수 있도록
사용할 타입에 맞게 선언을 해야함.
디파인으로 만들 때 주의할 점.
: 역슬래쉬 다음에 띄어쓰기가 오면, 띄어쓰기가 연결되므로 오류 발생함.
-- 띄어쓰기 없다면, 오류 발생하지 않음.
전처리기에서 처리되므로, 컴파일러가 알기 위해서 사용할 타입에 맞게 선언해야 함.
이렇게 먼저 컴파일러가 타입에 맞는 함수를 미리 만들 수 있게 선언해야 함!
-> define 과는 다르게 선언할 필요 없음.
하지만 string으로 하면??
: -> define 과는 다르게 타입 검사를 함.
//define 의 경우, 문제 없이 빌드가 됨....
: 아래 그림 잘못됨.
1) 타입 검사.
디파인은 타입 검사를 안함.
템플릿은 타입 검사를 함.
2) 선언할 필요가 없음!
왜 필요할까??
: 타입형식을 설계자가 명시할 필요 없게 해서 유연한 코딩이 가능함!
-> 이런 상황에서 float 데이터들은 int로 암묵적형변환 되므로 데이터가 잘림.
하지만 template으로 설계하면 이러한 문제는 발생하지 않음.
- 요렇게
-> 놓친점. 템플릿 함수와는 다르게 템플릿 클래스를 만들 때, 객체 생성시,
타입을 알려줘야 함.