본문 바로가기

c++/template프로그래밍.8

templateSpecialization, meta template.. (특수화, 메타 템플릿..) 기본1 함수 특수화.. 기본 1 함수 특수화 소스 #include using namespace std; //primary template template class Stack { public: void push(T a) }; //partial specialization (부분 특수화..) template class Stack { public: void push(T a) }; //specialization 특수화.. 완벽하게 타입이 char*로 결정되어서 template에서 ?가 필요없다.. template class Stack { public: void push(char* a) {} }; int main() { Stack s1; s1.push return 0; } 위에서 일반적인 템플릿은 primary .. 2022. 5. 16.
thintemplate thintemplate thintemplate는 템플릿의 단점인 코드 메모리증가를 조금이나마 막기위한 방법입니다 필요없는 것을 base 클래스로 올리거나 아니면 모두 base클래스로 올리는 기법이다. 사용하지 않는 것은 base로 올려서 사용하지않으면 코드 메모리를 방지할 수 있다. 소스 #include using namespace std; class Base { protected: int sz; public: int size() const; bool empty() const; }; template class Vector : public Base { T* buff; //int sz; public: //size랑 empty는 템플릿이 필요가 없는 환경이다. 부모로 올려도 상관없다. //int size() .. 2022. 5. 16.
template..packexpansion.. pack_expansion packExpansion은 팩들을 나열한다고 팩 expansion이라고한다.. 여기서 parameterpack을 다루는 방법들을 소개합니다. 파라미터팩을 사용하는 방법은 파라미터팩패턴뒤 바로 ...을 해주면된다 -> "parameterpack"... 소스 코드 #include using namespace std; //pack expansion.. int hoo(int n) { return -n; } void goo(int a, int b, int c) { cout 2022. 5. 16.
템플릿 템플릿 파라마터, 템플릿 메서드, 템플릿 초기화, friend template.. 템플릿 템플릿 파라마터 만약 template clss Grid ...가 존재한다면 Grid myIntGrid라고 int가 중복이된다. 해결책 -> 템플릿 템플릿 파라미터를 이용하면된다. 템플릿 템플릿 파라미터.. STL 템플릿 컨테이너 정의를 보면 template class vector.. 로 되어있다. 위의 템플릿정의를 두번째 템플릿 인자로 넣는 것이 템플릿 템플릿이다.. template class Grid { .... 위의 포현대로 하면 중복이 사라진다. Grid myGrid; ... 중복 있는 것이 더 좋은 것같기도하고.... 템플릿 메서드 #include #include #include // c++ 11 using namespace std; //decltype -> 후위 반환타입... //temp.. 2022. 5. 13.