J's Study log

[C++] Class Template & Template Specialization 본문

Computer Language/C++

[C++] Class Template & Template Specialization

정우섭 2020. 7. 6. 20:11

Class Template

 

  • Class template is for type of members in class.

  • Class template sets the type while constructing.
//member function defined inside the class
#include <iostream>
using namespace std;
template <class T>
class Simple{
private:
T sign;
int num;
public:
Simple(T _sign, int _num):sign(_sign), num(_num) {}
void Print(){
cout<<"sign : "<<sign<<endl;
cout<<"num : "<<num<<endl;
}
void setSign(T sign){
this->sign = sign;
}
void setNum(int num){
this->num = num;
}
};
//member function defined outside the class
#include <iostream>
using namespace std;
template <class T>
class Simple{
private:
T sign;
int num;
public:
Simple(T _sign, int _num)
void Print()
void setSign(T sign)
void setNum(int num)
};
template <class T>
Simple<T>::Simple(T _sign, int _num):sign(_sign), num(_num) {}
template <class T>
void Simple<T>::Print(){
cout<<"sign : "<<sign<<endl;
cout<<"num : "<<num<<endl;
}
template <class T>
void Simple<T>::setSign(T sign){
this->sign = sign;
}
template <class T>
void Simple<T>::setNum(int num){
this->num = num;
}

 

 ※ Warnings

  • When member function is declared outside of the class, you must declare template again. (it's kind of function template)
  • When splitting the file 'Template Class's declaration & implementing' have to be in a same file.

 

Template Specialization

 

  • Template specialization is for making another template function for a specific type.
template <class T>
T sum(T a, T b){
return a + b;
}
template<>
char* sum<char*>(char* a, char* b){
char* re = "error"
cout<<"a :"<<a<<endl;
cout<<"b :"<<b<<endl;
return re;
}

 

 

 

 

 

 

 

 

 

[참고자료]

- 윤성우의 열혈 C++ 프로그래밍

Comments