2012-09-04 8 views
1

가정하자 나는템플릿 멤버 기본 초기화

template <typename T> 
class{ 
    T t; 
}; 

지금, 나는 그것의 유형에 대한 기본 값을 t을 초기화 생성자를 추가하려면 다음과 같은 템플릿을 가지고있다. 즉, 숫자 형식의 경우 t는 0으로 초기화해야하고 포인터는 nullptr으로 초기화해야합니다. 마지막으로 구조체와 같은 다른 유형이있을 수 있습니다. 여기에서는 좋은 초기화가 기본 생성자가됩니다 (어쨌든 호출되므로 여기서는 아무 것도 할 필요가 없습니다).

는 conlusion에서 나는 이런 식으로 뭔가를 찾고 있어요 : 내 가상의 구문이 지적 하듯이

template<typename T> 
class X{ 
    T t; 
    X() : t(default_value<T>::value); 
} 

, 나는 그것이 디폴트 값을 가지고 다른 전문 서식 파일의 일종으로 할 수 있다고 생각. 그러나 구조체와 클래스를 처리하는 방법은 무엇입니까? t(...)을 지정 했으므로 기본 생성자는 더 이상 옵션이 아닙니다.

답변

9

당신은

X() : t() { } 

그리고/또는 작업을 수행 할 수 있습니다에서이 C++ 11 초기화 가치 (또는이 초기화 기본입니까?) t를 기본 값이 무엇이든에

X() : t { } { } // see Johannes Schaub's comments about this 

배열의 경우 0, 내장 배열의 경우 0, 배열의 경우 일련의 (값이 기본값 임) 초기화 또는 사용자 정의 유형의 기본 생성자를 사용합니다.

+1

{}을 (를) 사용하는 것은 특정 초기화 (이 경우에는 값 초기화 필요)를 원할 경우 IMO는 좋지 않습니다. 예를 들어 {}을 사용하면 T가 참조 유형 인 경우 정의되지 않은 동작이 자동으로 나타납니다. –

+0

@ JohannesSchaub-litb 아, 고마워, 나는 그것에 대해 전혀 몰랐다. –

관련 문제