728x90
반응형
SMALL
템플릿에 대해서
C++ 템플릿은 강력하고 유연한 프로그래밍 기능으로, 일반화된 코드를 작성할 수 있도록 도와주는 매커니즘입니다. 템플릿은 컴파일 타임에 코드를 생성하며, 컴파일러가 특정한 자료형이나 값을 사용하여 템플릿을 "인스턴스화"합니다. 이를 통해 특정한 자료형이나 알고리즘에 종속되지 않는 유연하고 재사용 가능한 코드를 작성할 수 있습니다.
템플릿 기본 구문:
- 함수 템플릿:
함수 템플릿은 template 키워드를 사용하여 선언되며, <typename T>는 템플릿 매개변수를 선언합니다.template <typename T> T add(T a, T b) { return a + b; }
- 클래스 템플릿:
클래스 템플릿은 일반적으로 특정한 자료형을 인스턴스화하는 데 사용됩니다.template <typename T> class MyContainer { private: T element; public: MyContainer(T arg) : element(arg) {} T getValue() { return element; } };
템플릿 특수화:
// 특수화되지 않은 경우
template <typename T>
void print(T value) {
std::cout << value << std::endl;
}
// int 자료형에 대한 특수화
template <>
void print<int>(int value) {
std::cout << "Integer: " << value << std::endl;
}
템플릿의 활용:
int main() {
// 함수 템플릿 사용
std::cout << add(5, 3) << std::endl;
// 클래스 템플릿 사용
MyContainer<double> container(3.14);
std::cout << container.getValue() << std::endl;
// 특수화된 템플릿 사용
print("Hello");
print(42); // int에 대한 특수화 버전이 호출됨
return 0;
}
C++ 템플릿은 코드의 일반화와 재사용을 돕는 강력한 기능이지만, 사용 시에 주의가 필요합니다. 오류 메시지가 복잡할 수 있고, 잘못 사용할 경우 코드의 유지보수가 어려워질 수 있습니다. 올바른 사용법을 익히고, 필요한 경우에만 사용하는 것이 중요합니다.
함수, 클래스 템플릿 예제
1. 함수 템플릿:
#include <iostream>
// 두 값을 교환하는 함수 템플릿
template <typename T>
void swapValues(T &a, T &b) {
T temp = a;
a = b;
b = temp;
}
int main() {
int intA = 5, intB = 10;
double doubleA = 3.14, doubleB = 6.28;
std::cout << "Before swapping: " << intA << ", " << intB << std::endl;
swapValues(intA, intB);
std::cout << "After swapping: " << intA << ", " << intB << std::endl;
std::cout << "Before swapping: " << doubleA << ", " << doubleB << std::endl;
swapValues(doubleA, doubleB);
std::cout << "After swapping: " << doubleA << ", " << doubleB << std::endl;
return 0;
}
2. 클래스 템플릿:
#include <iostream>
// 동적 배열을 저장하는 동적 배열 클래스 템플릿
template <typename T>
class DynamicArray {
private:
T *array;
int size;
public:
DynamicArray(int sz) : size(sz) {
array = new T[size];
}
~DynamicArray() {
delete[] array;
}
T& operator[](int index) {
return array[index];
}
void display() {
for (int i = 0; i < size; ++i) {
std::cout << array[i] << " ";
}
std::cout << std::endl;
}
};
int main() {
// 정수 배열
DynamicArray<int> intArray(5);
for (int i = 0; i < 5; ++i) {
intArray[i] = i * 2;
}
std::cout << "Integer Array: ";
intArray.display();
// 실수 배열
DynamicArray<double> doubleArray(3);
for (int i = 0; i < 3; ++i) {
doubleArray[i] = i * 1.5;
}
std::cout << "Double Array: ";
doubleArray.display();
return 0;
}
이러한 예제는 C++ 템플릿의 기본적인 사용 방법을 보여줍니다. 함수 템플릿은 다양한 자료형에 대해 동일한 코드를 사용할 수 있게 해주고, 클래스 템플릿은 동일한 구조를 가진 여러 종류의 클래스를 만들 수 있도록 도와줍니다.
728x90
반응형
LIST
'IT, 컴퓨터' 카테고리의 다른 글
CRT, LCD, LED 모니터의 특징 그리고 장단점 (92) | 2024.01.07 |
---|---|
[C++] string library, STL Container에서의 string 사용법 (97) | 2024.01.06 |
[C++] 자료구조 pair의 원리와 사용 방법 (93) | 2024.01.02 |
나스(NAS) 서버의 역할과 발전과정 및 제조사별 특징 (143) | 2023.12.29 |
컴퓨터 쿨러의 역할, 발전과정, 제조사별 특징 (163) | 2023.12.28 |