이펙티브 C++(340p ~ 350p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 340p ~ 350p 이펙티브 C++(340p ~ 350p) 요약 항목 48: 템플릿 메타프로그래밍, 하지 않겠는가? 템플릿 메타프로그래밍은 컴파일 도중에 실행되는 템플릿 기반의 프로그램을 작성하는 일을 말한다. 템플릿 메타프로그램은 C++ 컴파일러가 실행시키는 C++로 만들어진 프로그램이다. TMP 프로그램이 실행을 마친 후에 결과로 나온 출력물이 일반 컴파일 과정을 거친다. TMP는 다음과 같은 강점을 가진다. TMP를 쓰면 다른 방법으로는 까다롭거나 불가능한 일을 쉽게 할 수 있다. 템플릿 메타프로그램은 컴파일이 진행되는 동안 실행되기 때문에, 기존 작업을 런타임 영역에서 컴파일 영역으로 전환할 ..

    이펙티브 C++(332p ~ 340p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 332p ~ 340p 이펙티브 C++(332p ~ 340p) 요약 항목 47: 타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자 STL은 컨테이너, 반복자, 알고리즘의 템플릿과 유틸리티 템플릿이 존재한다. 이 중 하나가 advance 라는 이름의 템플릿인데, 지정된 반복자를 지정한 거리만큼 이동시켜준다. // iter를 d 단위만큼 이동 template void advance(IterT& iter, DistT d); 간단히 개념만 놓고 볼 때, advance는 iter += n을 하면 될 것 같지만, 이렇게 구현할 수 없다. += 연산을 지원하는 반복자는 임의 접근 반복자밖에 없기 때문이다. 임..

    이펙티브 C++(312p ~ 320p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 312p ~ 320p 요약 항목 44: 매개변수에 독립적인 코드는 템플릿으로부터 분리시키자 템플릿을 통해 코딩 시간 절약, 코드 중복 회피를 잡을 수 있다. 클래스 템플릿의 멤버 함수는 이들이 실제로 사용될 때만 암시적으로 인스턴스화 된다. 그러나 아무 생각 없이 템플릿을 사용하면 코드 비대화가 초래될 수 있다. 똑같거나 거의 비슷한 내용의 코드와 데이터가 여러 별로 중복되어 이진 파일로 구워진다는 의미이다. 따라서 이진 코드가 템플릿으로 인해 불어 터지는 현상을 미연에 방지할 방법을 알아둬야 한다. 공통성 및 가변성 분석 두 함수를 분석해서 공통적인 부분과 다른 부분을 찾은 후에 공통 부분은 새로운 ..

    이펙티브 C++(320p ~ 331p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 320p ~ 331p 이펙티브 C++(320p ~ 331p) 요약 항목 45: “호환되는 모든 타입”을 받아들이는 데는 멤버 함수 템플릿이 직방! 스마트 포인터는 일반적인 포인터처럼 동작하면서도 포인터가 주지 못하는 기능을 가지고 있다. STL 컨테이너의 반복자도 스마트 포인터로 마찬가지의 기능을 가지고 있다. 포인터에 ++ 연산자를 사용해서 연결 리스트의 한 노드에서 다른 노드로 이동하는 기능은 상상할 수도 없다. 포인터에도 스마트 포인터로 대신할 수 없는 특징이 있다. 그 중 하나가 암시적 변환이다. 파생 클래스 포인터는 암시적으로 기본 클래스 포인터로 변환되고, 비상수 객체에 대한 포인터는 상수 ..