template 기본

보물창고·2022년 3월 6일
0

//출처는 코드누리 c++ intermediate 강좌 입니다.
//강의를 보고 정리, 안보고 타이핑

"동일한 기능을 하는 코드"를 설계하는 방법은 2가지가 있음.
1. define 전처리기를 사용.
-> 타입을 추론할 수 없음. -> 사용할 타입에 맞게 선언해야 함.
-> 전처리기에서 처리하므로 오류 작성시 오류인지 판단 불가.
2. template, 컴파일러를 사용하는 방법.
-> 컴파일러에 의해 타입을 추론할 수 있음.

사용 예제

  • 오버로딩

    -> 오버로딩으로 구현하고, 타입에 따라 다른 타입의 함수가 호출됨을 확인할 수 있음.

: 타입만 다를 뿐, 동일한 기능을 수행하므로
디파인과 템플릿으로 만들어보자.

1. define 처리

  • 틀 만들기

  • 하지만 타입을 추론할 수 없으므로, 컴파일러가 타입을 알 수 있도록
    사용할 타입에 맞게 선언을 해야함.

  • 디파인으로 만들 때 주의할 점.
    : 역슬래쉬 다음에 띄어쓰기가 오면, 띄어쓰기가 연결되므로 오류 발생함.

define을 하면서 이거 뭔지??? 했던거.

  • \ 뒤에 띄어쓰기 있으면 에러다.

-- 띄어쓰기 없다면, 오류 발생하지 않음.

https://wowon.tistory.com/162

  • 전처리기에서 처리되므로, 컴파일러가 알기 위해서 사용할 타입에 맞게 선언해야 함.

  • 이렇게 먼저 컴파일러가 타입에 맞는 함수를 미리 만들 수 있게 선언해야 함!

2. template 처리하기


-> define 과는 다르게 선언할 필요 없음.

하지만 string으로 하면??
: -> define 과는 다르게 타입 검사를 함.

//define 의 경우, 문제 없이 빌드가 됨....
: 아래 그림 잘못됨.

위의 예제를 통한 템플릿과 디파인의 차이

1) 타입 검사.
디파인은 타입 검사를 안함.
템플릿은 타입 검사를 함.
2) 선언할 필요가 없음!

템플릿의 필요성

왜 필요할까??
: 타입형식을 설계자가 명시할 필요 없게 해서 유연한 코딩이 가능함!

-> 이런 상황에서 float 데이터들은 int로 암묵적형변환 되므로 데이터가 잘림.
하지만 template으로 설계하면 이러한 문제는 발생하지 않음.

  • 요렇게

    -> 놓친점. 템플릿 함수와는 다르게 템플릿 클래스를 만들 때, 객체 생성시,
    타입을 알려줘야 함.
profile
🔥🔥🔥

0개의 댓글