thintemplate
thintemplate는 템플릿의 단점인 코드 메모리증가를 조금이나마 막기위한 방법입니다 필요없는 것을 base 클래스로 올리거나 아니면 모두 base클래스로 올리는 기법이다.
사용하지 않는 것은 base로 올려서 사용하지않으면 코드 메모리를 방지할 수 있다.
소스
#include <iostream>
using namespace std;
class Base
{
protected:
int sz;
public:
int size() const;
bool empty() const;
};
template<typename T>
class Vector : public Base
{
T* buff;
//int sz;
public:
//size랑 empty는 템플릿이 필요가 없는 환경이다. 부모로 올려도 상관없다.
//int size() const;
//bool empty() const;
void push_front(const T& a) {}
T& front() {}
};
int main()
{
Vector<int> v1;
Vector<double> v2;
Vector<short> v3;
return 0;
}
- 위에서 템플릿 클래스에서 사용하지 않는 함수들은 기반 클래스 올리는 것이다..
소스2 (thin template)
#include <iostream>
using namespace std;
class Base
{
protected:
void* buff;
int sz;
public:
int size() const;
bool empty() const;
void push_front(const void* a) {}
void* front() {}
};
//캐스팅을 책임지는 파생 클래스
template<typename T>
class Vector : public Base
{
//T* buff;
//int sz;
public:
//size랑 empty는 템플릿이 필요가 없는 환경이다. 부모로 올려도 상관없다.
//int size() const;
//bool empty() const;
inline void push_front(const T& a) { Base::push_front(static_cast<void*>(a); }
inline T& front() { return static_cast<T&>Base::front(); }
};
int main()
{
Vector<int> v1;
Vector<double> v2;
Vector<short> v3;
return 0;
}
- 모든것을 부모에 올리고 자식은 부모가 void*로 되어있어서 파생클래스는 캐스팅만 책임을 지면된다..
'c++ > template프로그래밍.' 카테고리의 다른 글
type_trais (0) | 2022.05.18 |
---|---|
template기본문법 (parameter, friend, typename..) (0) | 2022.05.18 |
templateSpecialization, meta template.. (특수화, 메타 템플릿..) (0) | 2022.05.16 |
template..packexpansion.. (0) | 2022.05.16 |
템플릿 템플릿 파라마터, 템플릿 메서드, 템플릿 초기화, friend template.. (0) | 2022.05.13 |