[C++] Function Overloading과 Template
Function Overloading
함수가 이름을 공유하는 것이다.
그 대신 parameters의 type을 다르게 해야 한다.
C에서는 data type에 따라 함수의 이름을 설정해야 한다.
C++의 경우 동일한 이름만 써도 변수에 type만 정의하면 알아서 인식한다.
하지만 return값이 다를 경우에는 이름을 공유할 수 없다.
Compiler는 name mangling을 통해 함수 각각을 인식한다.
Function Templates
함수가 기능은 동일하고 input 받는 type만 다를 경우 template을 만들어서 사용한다.
다음과 같이 template keyword를 통해 구현할 수 있다.
T부분이 어떤 datatype이 될 수 있다.
- Template instantiation
다음과 같이 다른 type의 parameter가 들어올 때 compiler가 mySwap function에 대해 각각 작동하는 code가 generate 한다.
- Template Arguments
T를 확실하게 알 수 있을 면 argument를 꼭 지정해주지 않아도 된다.
첫 번째의 경우 a, b가 int이기 때문에 당연히 int일거라고 예상한다.
반면 2,3번째의 경우 argument가 확실히 정해지지 않아 추론할 수없다. 이 경우 명시적으로 argument를 설정해야 한다.
function template은 다양한 template argument를 동시에 사용할 수 있다.
Non-Type Template Arguments
type만 지정할 뿐 아니라 값을 argument로 지정할 수 있다.
단, constants만 들어갈 수 있다.
보는 것처럼 N을 3으로 지정하여 동일한 function을 기능적으로 작동할 수 있다.
이렇게 하면 좋은 점이 function의 코드를 최적화할 수 있고 complie단계에서 potential error를 쉽게 잡을 수 있다.
미리 <3>이라고 constants가 정해져 있기 때문이다.
반면 단점은 value에 대해 compile time에 알 수 없다면 사용할 수 없다.
각각의 value에 따라 template이 형성돼서 실행되기 때문에 실행하는 파일의 크기가 커진다.