본문 바로가기

NC University/Advanced C++34

1일차 - TypeTraits 아래와 같은 코드를 생각해보자. template inline T Max(T a, T b) { return a < b ? b : a; } int main(int argc, char* argv[]) { int x = 10, y = 20; Max(x, y); Max(&x, &y); } Max 함수는 함수 템플릿이므로 위의 호출들은 아무 문제없이 수행될 것이다. 하지만 두번째 호출은 인자로 정수값의 주소를 넘기므로 T는 int* 로 추론될 것이며, 이 함수는 두 주소값을 비교한다. 이는 의미없는 행위이며, 실제로 사용자가 원하는 것은 아래와 같이 인자가 포인터일 경우에는 역참조한 값에 대한 비교일 것이다. template inline T Max(T a, T b) { if (T is pointer-type) re.. 2021. 6. 14.
1일차 - Template 부분 전문화 하나의 클래스 템플릿에서 타입에 따라 다른 형태의 클래스들이 생성 #include using namespace std; // primary template template class Stack { public: void Push() { cout 2021. 6. 14.
6일차 - 단위전략 기반의 클래스 디자인 Intro 아래는 간단한 List 클래스의 일부와 이 클래스를 사용하는 코드이다. 다음의 코드에서 문제점이 무엇인지를 생각해보자. #include using namespace std; template class List { public: void push_front (const T& a) { // do something (no synchronization) } // other merber functions and variables }; List g_list; //< 전역변수 int main(int argc, char* argv[]) { g_list.push_front(10); // do something return 0; } 위의 코드에서 g_list는 전역변수이므로 다중 스레드 환경에서는 thread-.. 2015. 11. 24.
6일차 - thin template Intro 임의의 타입 객체들을 저장하는 단순한 컨테이너를 구현해보자. 이 컨테이너의 기능은 컨테이너의 맨 앞에 객체를 추가하거나, 컨테이너에 저장된 첫 element를 얻어오는 것으로 충분하다. 또한, 컨테이너의 현재 상태(state)를 보여주는 함수 2개(size, empty)도 함께 포함시키자. 이러한 요구사항을 만족시키는 컨테이너의 선언은 아래의 코드와 같은 형태가 될 것이다. template class Container { public: int size () const; bool empty () const; void push_front (const T& a); T& front (); private: T* buffer_; int size_; }; 이제 위의 Container 템플릿을 아래와 같이 .. 2015. 11. 4.