c++ 함수 템플릿 사용하기
728x90
동작하는 방식은 똑같은데 parameter 가 다른경우 일일이 다른 함수를 만들어 줘야하는 번거로움이 있습니다.
int getMax(int x, int y) {
return (x > y) ? x : y;
}
double getMax(double x, double y) {
return (x > y) ? x : y;
}
두가지 만 해도 함수를 하나더 만들어 줘야하는데 float char 등등.. 여러가지 type의 같은 함수를 많이 만들수록 유지보수도 힘들어집니다.
그래서 template 라는 함수를 사용해서 코드를 간소화 시키겠습니다.
template<typename T>
T getMax(T x, T y) {
return (x > y) ? x : y;
}
template<typename T> 보통 T를 많이 쓰지만 원하시는 변수명을 지으셔도 상관없습니다.
이렇게 되면
#include <iostream>
template<typename T>
T getMax(T x, T y) {
return (x > y) ? x : y;
}
int main()
{
std::cout << getMax(1, 2) << std::endl;
std::cout << getMax(3.14, 1.592) << std::endl;
return 0;
}
컴파일러가 자동으로 type잡아서 함수를 오버로딩 한것처럼 작동합니다.
template를 사용하실 때 주의할점을 살펴보겠습니다.
#pragma once
#include <iostream>
class Cents
{
private:
int m_cents;
public:
Cents(int cents)
: m_cents(cents)
{}
};
Cents라는 클래스를 헤더파일로 만들고 초기화를 합니다.
template함수로 만들어진 getmax를 이용해 두 동전의 크기를 비교해보겠습니다.
#include <iostream>
#include "Cents.h"
template<typename T>
T getMax(T x, T y) {
return (x > y) ? x : y;
}
int getMax(int x, int y) {
return (x > y) ? x : y;
}
double getMax(double x, double y) {
return (x > y) ? x : y;
}
int main()
{
std::cout << getMax(1, 2) << std::endl;
std::cout << getMax(3.14, 1.592) << std::endl;
std::cout << getMax(Cents(5), Cents(9)) << std::endl;
return 0;
}
이렇게 Cents를 바로 비교한다면 컴파일러 에러가 나실껍니다.
template를 사용하기위해서는 미리 준비를 해주지 않는이상 사용할수 없습니다.
비교 연산자와 출력 연산자를 오버로딩하겠습니다.
#pragma once
#include <iostream>
class Cents
{
private:
int m_cents;
public:
Cents(int cents)
: m_cents(cents)
{}
friend bool operator > (const Cents& c1, const Cents& c2) {
return (c1.m_cents > c2.m_cents);
}
friend std::ostream& operator << (std::ostream& out, const Cents& cents) {
out << cents.m_cents << " cnets ";
return out;
}
};
2
3.14
9 cnets
계속하려면 아무 키나 누르십시오 . . .
결과가 잘 출력된 모습입니다.
728x90
'C++ > c++ - 따라하며 배우는 c++' 카테고리의 다른 글
괄호 연산자 오버로딩 (0) | 2020.11.12 |
---|---|
c++ 첨자연산자 오버로딩 (0) | 2020.11.12 |
증감연산자 오버로딩 (0) | 2020.11.12 |
c++ 비교 연산자 오버로딩 하기 (0) | 2020.11.05 |
c++ 단항 연산자 오버로딩 하기 (0) | 2020.11.05 |
댓글
이 글 공유하기
다른 글
-
괄호 연산자 오버로딩
괄호 연산자 오버로딩
2020.11.12 -
c++ 첨자연산자 오버로딩
c++ 첨자연산자 오버로딩
2020.11.12 -
증감연산자 오버로딩
증감연산자 오버로딩
2020.11.12 -
c++ 비교 연산자 오버로딩 하기
c++ 비교 연산자 오버로딩 하기
2020.11.05