C++ template
2019. 8. 13. 11:14ㆍPL/C++
c++에서는 템플릿 언어를 이용해서 일반화 프로그래밍을 할 수 있다. 템플릿은 매개변수 타입에 따라 함수 및 클래스를 손쉽게 '일반적인' 형태로 만들 수 있다. 다양한 타입에 따라 동작할 수 있는 장점이 있어 소스코드의 재사용성이 높아진다
먼저 함수 템플릿을 살펴보면
#include <string>
#include <iostream>
using namespace std;
template <typename T>
void change(T &a, T &b)
{
T tmp;
tmp = a;
a = b;
b = tmp;
}
template <> void change<string>(string &a, string &b)
{
cout << "명시적 템플릿 함수입니다\n";
string tmp;
tmp = a;
a = b;
b = tmp;
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int a = 3, b = 4;
change(a, b);
cout << a << ' ' << b << '\n';
string s1 = "노을", s2 = "수리";
change(s1, s2);
cout << s1 << ' ' << s2 << '\n';
return 0;
}
다음으로 클래스 템플릿을 살펴보면, 함수 템플릿과 마찬가지로 선언부에 template를 사용하겠다고 명시하고 모든 자료형에 typename 이름을 넣어주면 된다. 또, typename 선언 시 기본으로 자료형을 넣어주면 default 자료형으로 동작한다
#include <string>
#include <iostream>
using namespace std;
template <typename T=double>
class A {
private:
T data;
public:
A(T data) {
this->data = data;
}
void setData(T data) {
this->data = data;
}
T getData(void) {
return data;
}
};
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
A<int> a(3);
cout << a.getData() << '\n';
A<string> b("노을");
cout << b.getData() << '\n';
A<> c(3.3);
cout << c.getData() << '\n';
return 0;
}
'PL > C++' 카테고리의 다른 글
[boost.Asio tutorial] Using a timer asynchronously (0) | 2019.08.13 |
---|---|
[boost.Asio tutorial] Using a timer synchronously (0) | 2019.08.13 |
strncpy 길이 인자로 strlen을 넣어줄 때 (0) | 2019.08.13 |
정적 바인딩과 동적 바인딩 (0) | 2019.08.12 |
C++ Boost.Asio 설치 (0) | 2019.08.12 |