📝 두개의 제네릭 타입을 갖는 템플릿
#include <iostream>
using namespace std;
template <class T1, class T2>
void myCopy(T1 src[], T2 dest[], int n) {
for (int i = 0; i < n; i++) {
dest[i] = (T2)src[i];
}
}
int main() {
int x[] = { 1,2,3,4,5 };
double d[5];
myCopy(x, d, 5);
for (int i = 0; i < 5; i++) { cout << d[i] << ' '; }
}
📝 중복 함수와 템플릿 우선 순위
#include <iostream>
using namespace std;
template <class T>
void print(T arr[], int n) {
for (int i = 0; i < n; i++) {
cout << arr[i] << '\t';
}
}
void print(char arr[], int n) {
for (int i = 0; i < n; i++) {
cout << (int)arr[i] << '\t';
}
}
int main() {
char c[] = { 1,2,3,4,5 };
print(c, 5);
}
📝 제네릭 클래스
#include <iostream>
using namespace std;
template <class T>
class MyStack {
private:
int tos;
T data[100];
public:
MyStack();
void push(T element);
T pop();
};
template<class T>
MyStack<T>::MyStack() {
tos = -1;
}
template<class T>
void MyStack<T>::push(T element) {
if (tos == 99) {
cout << "stack full";
return;
}
tos++;
data[tos] = element;
}
template<class T>
T MyStack<T>::pop() {
T retData;
if (tos == -1) {
cout << "stack empty";
return 0;
}
else {
retData = data[tos--];
return retData;
}
}
int main() {
MyStack<int> iStack;
iStack.push(5);
cout << iStack.pop();
}