블로그 이미지
이태원에서 사는 다섯식구의 무직 가장. 흰둥에미

카테고리

분류 전체보기 (184)
Itaewon (2)
ryu's?? (1)
20121210이전 (20)
20130827이전 (147)
soo'study (13)
Total40,945
Today3
Yesterday7

항목 41 - 45

20130827이전/EC++ / 2013.01.09 04:50

템플릿과 일반화 프로그래밍....


항목 41. 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터..

      - 클래스 및 템플릿은 모두 인터페이스와 다형성을 지원합니다.

      - 클래스에서, 인터페이스는 명시적이며 함수의 시그너처를 중심으로 구성되어 있습니다.

         다형성은 프로그램 실행 중에 가상 함수를 통해 나타납니다.

      - 템플릿 매개변수의 경우, 인터페이스는 암시적이며 유효 표현식에 기반을 두어 구성됩니다.

        다형성은 컴파일 중에 템플릿 인스턴스화와 함수 오버로딩 모호성 해결을 통해 나타납니다.

        if (w.size() > 10 && w != someW) ... 에서 조건문의 결과가 bool과 호환만 되면 된다.


항목 42. typename의 두 가지 의미를 제대로 파악하자.

      - 템플릿의 타입 매개변수를 선언할 때는 class와 typename의 뜻이 완전히 똑같다.

      - nested dependent type name에 대해 컴파일러가 타입인지 아닌지 알 방법이 없기에,

         typename C::const_iterator iter(container.begin()); 의 형태로 써야 한다.

         단, 중첩 의존 타입 이름이 기본 클래스의 리스트에 있거나,

         멤버 초기화 리스트 내의 기본 클래스 식별자로 있는 경우는 안붙여줌.


항목 43. 템플릿으로 만들어진 기본 클래스 안의 이름에 접근하는 방법을 알아 두자.

      - template<>

        class A : public B<Special> {....      -> 완전 템플릿 특수화.

      - 위와 같은 완전 템플릿 특수화의 가능성으로 인해 기본 클래스의 함수를 그냥 호출하는 것은 불가능.

      - 방법 1. this->method();

      - 방법 2. using 선언을 이용하여 사용.

      - 방법 3. 기본클래스에 한정자를 붙여 호출(호출되는 함수가 가상 함수인 경우, 가상 함수 바인딩이 무시되므로 비추)


항목 44. 매개변수에 독립적인 코드는 템플릿으로부터 분리시키자.

      - 템플릿 사용으로 인한 코드 비대화를 막기위해..

      - 공통성 및 가변성 분석

      - 템플릿을 사용하면 비슷비슷한 클래스와 함수가 여러 벌 만들어집니다.

         따라서 템플릿 매개변수에 종속되지 않은 템플릿 코드는 비대화의 원인이 됩니다.

      - 비타입 템플릿 매개변수로 생기는 코드 비대화의 경우,

         템플릿 매개변수를 함수 매개변수 혹은 클래스 데이터 멤버로 대체함으로써 비대화를 종종 없앨 수 있습니다.

      - 타입 매개변수로 생기는 코드 비대화의 경우, 동일한 이진 표현구조를 가지고 인스턴스화되는 타입들이

         한 가지 함수 구현을 공유하게 만듦으로서 비대화를 감소시킬 수 있습니다.

항목 45. "호환되는 모든 타입"을 받아들이는 데는 멤버 함수 템플릿이 직방!

      - 생성자를 만들어내는 템플릿을 사용 (일반화 복사 생성자)

      - 멤버 함수 템플릿 - 어떤 클래스의 멤버 함수를 찍어내는 템플릿

      - 호환되는 모든 타입을 받아들이는 멤버 함수를 만들려면 멤버 함수 템플릿을 사용합니다.

      - 일반화된 복사 생성 연산과 일반화된 대입 연산을 위해 멤버 템플릿을 선언했다 하더라도,

         보통의 복사 생성자와 복사 대입 연산자는 여전히 직접 선언해야 합니다.


'20130827이전 > EC++' 카테고리의 다른 글

항목 49 - 52  (0) 2013.01.10
항목 46 - 48  (0) 2013.01.09
항목 41 - 45  (1) 2013.01.09
항목 36 - 40  (0) 2013.01.08
항목 32 - 35  (0) 2013.01.08
항목 29 - 31  (0) 2013.01.03
Posted by 흰둥에미

최근에 달린 댓글

최근에 받은 트랙백

글 보관함