티스토리 뷰

프로그래밍 언어/C++

Template (클래스 템플릿 , c++)

거북이의 기술블로그 2024. 7. 5. 12:33
1. 클래스 템플릿               
2. 클래스 템플릿 특수화    
3. 클래스 템플릿 다중 인자

 

클래스 템플릿

template<typename T>
class RandomBox
{
public:
	T GetRandomData()
	{
		int idx = rand() % 10;
		return _data[idx];
	}
public:
	T _data[10];
};


int main()
{
    RandomBox<int> rb1;
}
  • class 선언 위에 템플릿 선언
  • class 내부에서 아직 미정된 타입인 부분에 템플릿 사용
  • 인스턴스 생성시, <int> 처럼 타입 지정

 

클래스 템플릿 특수화

template<typename T>
class RandomBox
{
public:
	T GetRandomData()
	{
		int idx = rand() % 10;
		return _data[idx];
	}
public:
	T _data[10];
};

// 템플릿 특수화 (double일 경우, 밑의 클래스가 호출됨)
template<>
class RandomBox<double> // 템플릿 특수화
{
public:
    //타입 double 지정
	double GetRandomData()
	{
		int idx = rand() % 10;
		return _data[idx];
	}
public:
    //타입 double 지정
	double _data[10];
};

int main()
{
    RandomBax<double> rb2;
}
  1. "template<>" 으로 템플릿 특수화 선언
  2. 클래스 옆에 원하는 타입 지정 ( ex) class RandomBox<double> )
  3. 원하는 타입으로 클래스 생성

 

클래스 템플릿 다중 인자

template<typename T, int SIZE>
class RandomBox
{
public:
	T GetRandomData()
	{
		int idx = rand() % 10;
		return _data[idx];
	}
public:
	T _data[SIZE];
};

// 템플릿 특수화 (double일 경우, 밑의 클래스가 호출됨)
template<int SIZE> // SIZE는 인자로 사용됨
class RandomBox<double, SIZE> // 템플릿 특수화할경우 T가 double로 지정한 것이므로 <double, SIZE>를 해줘야한다
{
public:
	double GetRandomData()
	{
		int idx = rand() % 10;
		return _data[idx];
	}
public:
	double _data[SIZE];
};


int main()
{
	srand(static_cast<unsigned int>(time(nullptr)));
	
	// 타입을 지정 해줘야함 + template 인자값이 있다면 넣어줘야함
	RandomBox<int, 10> rb1;
	for (int i = 0; i < 10; i++)
	{
		rb1._data[i] = i;
	}

	RandomBox<float, 10> rb1;
	for (int i = 0; i < 10; i++)
	{
		rb1._data[i] = i;
	}

	RandomBox<double, 20> rb1;
	for (int i = 0; i < 20; i++)
	{
		rb1._data[i] = i + 0.5;
	}

	return 0;
}
  • 템플릿으로 사용될 경우, 클래스는 인스턴스 생성시 어떤 타입으로 할지 지정해줘야함
  • 템플릿 초기화가 무조건 <>이 아닌, 다중 인자일경우 원하는 타입 제외하고 나머지는 그대로 다시 작성해줘야함
    • template<int SIZE>
    • class RandomBax<double, SIZE> ...

 

'프로그래밍 언어 > C++' 카테고리의 다른 글

콜백함수 (함수객체, 템플릿)  (0) 2024.07.05
Template (함수 템플릿 - c++)  (0) 2024.07.05
함수 객체 (C++)  (1) 2024.07.05
함수포인터 (C++)  (0) 2024.07.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함