반응형
특성 클래스는 어떻게 작동하며 어떤 역할을합니까?
Scott Meyers의 Effective C ++을 읽고 있습니다. 그는 특성 클래스에 대해 이야기하고 있습니다. 컴파일 시간 동안 객체의 유형을 결정하는 데 필요하다는 것을 이해했지만 이러한 클래스가 실제로 수행하는 작업에 대한 설명을 이해할 수 없습니다. (기술적 인 관점에서)
아마도 유형 특성을 작동시키는 일종의 마법을 기대하고 계실 것입니다. 이 경우 실망하십시오. 마법은 없습니다. 유형 특성은 각 유형에 대해 수동으로 정의됩니다. 예를 들어, 반복자에 iterator_traits
대한 typedef (예 :)를 제공하는을 고려하십시오 value_type
.
그것들을 사용하면 다음과 같이 쓸 수 있습니다.
iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.
그러나이 작업을 수행하기 위해 실제로 헤더 어딘가에 다음과 같은 명시 적 정의가 있습니다<iterator>
.
template <typename T>
struct iterator_traits<T*> {
typedef T value_type;
// …
};
이것은 형식의 유형 , 즉 일부 일반 유형의 포인터에 대한 유형의 부분적인 특수화 입니다 .iterator_traits
T*
같은 맥락에서 iterator_traits
다른 반복자 (예 : typename vector<T>::iterator
.
특성 클래스는 개체의 유형을 결정 하지 않습니다 . 대신 일반적으로 트레이 트 내부에 typedef 또는 상수를 정의하여 유형에 대한 추가 정보를 제공합니다.
참고 URL : https://stackoverflow.com/questions/3979766/how-do-traits-classes-work-and-what-do-they-do
반응형
'code' 카테고리의 다른 글
JSON 객체에서 __type 속성을 직렬화하지 않는 방법 (0) | 2020.11.28 |
---|---|
Android에서 '의견 제공'모드에서 Google Play 인 텐트를 시작하는 방법은 무엇입니까? (0) | 2020.11.28 |
Python 2.7 용 메모 라이브러리 (0) | 2020.11.28 |
./ 도트 슬래시로 시작하는 경로가있는 현재 디렉토리의 GitLab 마크 다운에서 이미지를 어떻게 참조 할 수 있습니까? (0) | 2020.11.28 |
순서에 관계없이 문자열 목록의 해시 가져 오기 (0) | 2020.11.28 |