Effective C + + Item 42 type: name 의 이중 적 의 미 를 이해 합 니 다.

본 고 는 senlie 오리지널 입 니 다. 이 주 소 를 유지 하 십시오.http://blog.csdn.net/zhengsenlie
경험 치: template 인 자 를 설명 할 때 접두사 키워드 class 와 type: name 을 교환 할 수 있 습 니 다.키워드 type: name 표 지 를 사용 하여 종속 형식 이름 을 끼 워 넣 으 십시오.예시 1:
template<typename C>
void print2nd(const C &container){
	C::const_iterator *x;//  。  const_iterator  static    ,x  global   ,    *   
	//...
}

예시 2:
template<typename C>
void print2nd(const C &container){
		if(container.size() >= 2){
			C::const_iterator iter(container.begin());//           
		}
}

해석: 해석 기 가 template 에 포 함 된 종속 이름 을 만 났 을 때 이 이름 이 유형 이 아니 라 고 가정 합 니 다.그래서 위의 예 는 유효한 C + + 코드 가 아 닙 니 다.
수정: 키워드 type: name 표지 에 종속 형식 이름 을 삽입 합 니 다.
template<typename C>
void print2nd(const C &container){
	if(container.size() >= 2){
		typename C::const_iterator iter(container.begin());
	}
}

경험 치: base class list 또는 member initialization list (구성원 초기 값 열) 에서 type: name 을 base class 수정자 로 사용 할 수 없습니다.
예시:
template<typename T>
class Derived: public Base<T>::Nested{ //     ,  typename                     ,                 ,      typename  
public:
	explicit Derived(int x): Base<T>::Nested(x) // mem.init.list    "typename"
	{
		typename Base<T>::Nested temp; //     typename
	}
};

좋은 웹페이지 즐겨찾기