[ Effective C++ ] 항목 47 : 타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자

Minsu._.Lighting·2023년 12월 14일
0

[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "

[핵심]

" 특성정보는 C++ 표준 라이브러리에서 발에 치일 정도로 흔히 쓰인다! "

  • 특성정보 클래스는 컴파일 도중에 사용할 수 있는 타입 관련 정보를 만들어낸다. 또한 특성정보 클래스는 템플릿 및 템플릿 특수 버전을 사용하여 구현한다!
  • 함수 오버로딩 기법과 결합하여 특성정보 클래스를 사용하면, 컴파일 타임에 결정되는 타입별 if...else 점검문을 구사할 수 있다!

💡 특성정보

  • 컴파일 도중에 어떤 주어진 타입의 정보를 얻을 수 있게 하는 객체를 지칭한다
    - 특성정보는 C++에 미리 정의된 문법 구조가 아닌, C++ 프로그래머들이 따르는 구현 기법이며 관례이다

  • 특성정보는 기본 제공 타입과 사용자 정의 타입에서 모두 돌아가야 한다



💡 특성정보 클래스

template<typename IterT>
struct iterator_traits;		// 반복자 타입에 대한 정보를 나타내는 템플릿
  • 특성정보를 구현하는데 사용한 구조체를 가리켜 '특성정보 클래스' 라고 부른다
    - 특성정보는 항상 구조체로 구현하는 것이 관례

📌 특성정보 클래스 사용법

  • 작업자 역할을 맡은 함수 혹은 함수 템플릿을 특성정보 매개 변수를 다르게 하여 오버로딩 한다. 그리고 전달되는 해당 특성정보에 맞추어 각 오버로드 버전을 구현한다
template<typename IterT, typename DistT>
void doAdvance(IterT& iter, DistT d, random_access_iterator_tag)
{
	iter += d;
}
...
  • 작업자를 호출하는 주 작업자 역할을 맡은 함수 혹은 함수 템플릿을 만든다. 이 때 특성정보 클래스에서 제공되는 정보를 넘겨서 작업자를 호출 하도록 구현한다
template<typename IterT, typename DistT>
void Advance(IterT& iter, DistT d)
{
	doAdvance
    {
    	iter, d, typename iterator_traits<IterT>::iterator_category()
    };
}
profile
오코완~😤😤

0개의 댓글

관련 채용 정보