Computing

[C++] Function Overloading과 Template

ysk1m 2025. 4. 2. 14:45

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이 형성돼서 실행되기 때문에 실행하는 파일의 크기가 커진다.