본문 바로가기

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

std::condition 구현 condition condition는 인자가 3가지가 있는데 첫번째 인자에 따라서 값이 두번째것으로 될 것인지 or 세번째 것으로 될 것인지 변경된다. conditional::type v1; conditional::type v2; 위에서 첫번째 v1은 첫번째인자가 true라서 int로 된다. v2는 첫번째 인자가 false라서 v2의 값은 double이된다. condition 구현. template struct conditional { using type = T1; }; template struct conditional { using type = T2; }; int main() { //conditional의 bool 인자가 true이거나, false로 결정되는데 bool이 true이면 두번재가 채택되고,.. 2022. 5. 23.
template_CRT CRT란? 기반 클래스에서 파생 클래스의 이름을 사용할 수 있게 하는 방법 CRT, CRTP 동일한 말이다. (Curious Recurring Template Pattern) 문법 template class Base { public: Base() { cout OnClick();.. static_cast(this)->OnClick(); } //이벤트가 많아서 가상함수를 많이 만들면 오버헤드가 크다(가상함수 테이블때문에..) void OnClick() { cout 2022. 5. 22.
type_trais type_trais type_traits는 포인터인지 아닌지 타입을 알아내기 위해서 type traits 만드는 일반적인 방법이다.. is_pointer 구현.. 소스 template struct Is_pointer { //bool value = false가 안되는 이유는 이것은 변수이다.!! 변수이면 run time까지 가게되는데.. 밑의 Is_pointer::value는 컴파일 시간에 사용이 되어야한다.. //enum{value = false}; static constexpr bool value = false; }; //포인터 타입에 대해서부분 특수화..! template struct Is_pointer { //enum { value = true }; static constexpr bool value.. 2022. 5. 18.
template기본문법 (parameter, friend, typename..) template의 parameter template parameter로 template받기.. 템플릿의 인자로 non-type, type, template을 받을 수 있다 템플릿의 인자로 템플릿을?! 가능하다. 예시 template class list{}; template class Stack { }; int main() { //list s1; // list는 타입이 아니고 템플릿이라서 에러! 이렇게할려면 생성차를 통해서 타입을 deduction하도록해야한다. list s2; //list는 타입.. Stack s3; return 0; } 위의 소스에서 list를 보면 list는 템플릿 클래스이다. main부에서 Stack s3으로 하나는 int타입을 하나는 템플릿을 받고있다. 그럼 Stack에서 그렇게 .. 2022. 5. 18.