Template

템플릿의 일반 사용법

template <typename A, typename B>
	class InstanceTemplate
	{
	public:
		void Add(A a, B b) {
			std::cout << a + b<<std::endl;
		}
	};

템플릿 특수화 만약 내가 위처럼 A,B를 받는다고는 했지만 그중에서도 double이 하나 들어오면 특별하게 취급하고 싶을 때.

template <typename B>
	class InstanceTemplate<double, B> {
	public:
		void Double(double a, B b) {
			std::cout << a *  b<<std::endl;
		}
	};

마찬가지로 내가 정한 것만 들어왔으면 할 때

template <>
class InstanceTemplate<char, char> {
public:
	void Double(char a, char b) {
		std::cout << a <<b << std::endl;
	}
};

그래도 template<>을 써주긴 해야함.


함수 템플릿

template<typename B>
	void coutAll(B _b) {
		std::cout << _b << std::endl;
	}

static 키워드와 함수 템플릿

template<typename T>
T Fuc(T num){
	static T sum = 0;
	sum += 0;
	return sum;
}

이런 경우에는 static 변수 안에 매개변수의 자료형에 따라 따로 메모리를 할당할 수 있다. 그러니까 int sum과 float sum이 구분되어서 메모리에 할당된다는 이야기.