문제점

C++ 포큐아카데미

위의 코드는 문제가 있다기 보다는 엄청 귀찮다. 왜냐하면 함수 오버로딩을 이용해서 매개변수, 반환 타입별로 함수를 만들기 때문이다. Add double이면 double도 만들어줘야 한다. 정말 귀찮다. 해결방법이 뭘까??

 

해결책(템플릿)
template <typename T>
T Add(T a, T b)
{
	return a + b;
}


int main()
{
	std::cout << Add<int>(3, 10) << std::endl;
	std::cout << Add<float>(3.14f, 10.14f) << std::endl;

	return 0;
}

위 처럼 템플릿 함수 Add를 만들면 컴파일 시에 int형 함수, float형 함수를 따로따로 만들어 준다. (컴파일러 정말 감사..... 꿀 기능)

 

작동 원리

템플릿을 인스턴스화 할때마다 컴파일러가 알아서 함수를 생성해준다.

그래서 자료형 가짓수에 비례해서 exe파일이 증가한다.

 

템플릿 클래스 예제
#include <stdio.h>
#include <iostream>
#include <map>


template<typename T>
class MyArray
{
public:
	bool Add(T data);
	MyArray();

private:
	enum { MAX = 3 };
	int mSize;
	T mArray[MAX];
};


template<typename T>
bool MyArray<T>::Add(T data)
{
	if (mSize >= MAX)
	{
		return false;
	}
	mArray[mSize] = data;
	mSize++;
	return true;
}

template<typename T>
MyArray<T>::MyArray()
	: mSize(0)
{
}



template <typename T>
T Add(T a, T b)
{
	return a + b;
}


int main()
{
	MyArray<int> scores;

	scores.Add(10);
	scores.Add(20);
	scores.Add(30);
	scores.Add(40);

	return 0;
}

'C++' 카테고리의 다른 글

추상클래스(Abstract), 인터페이스  (0) 2020.04.27
C++ 객체 백터 Vector  (0) 2020.04.17
C++ iterator 개념  (0) 2020.04.17
C++ 정적 바인딩, 동적 바인딩  (1) 2020.04.09
C++ 멤버함수의 메모리 위치  (0) 2020.04.09

+ Recent posts