2009-02-24 2 views
7

템플릿이있는 클래스를 볼 수있는 곳이 많습니다. 템플릿을 사용하는 사람이 왜 템플릿을 사용했는지 생각할 필요가 없습니다.왜 부스트가 너무 많이 템플릿 화 되었습니까?

예를 들어, 뮤텍스 클래스 (들). 모든 뮤텍스 개념은 개념으로 일치하는 인터페이스로 몇 개의 기본 클래스 또는 추상 클래스를 간단하게 만들 수있는 템플릿으로 구현됩니다.

편집 후 답변 : 가상 기능의 비용에 대해 생각했지만 때로는 더 나은 이해를 위해 성능 저하를 거의주지 않을 가치가 있습니까? 때때로 템플릿을 잘못 이해 한 결과 템플릿 화 된 코드를 이해하고 컴파일러 오류를 해독하는 것이 매우 어렵습니다 (특히 부스트).

+0

이 사람에게 좋은 질문이 될 것입니다 : http://stackoverflow.com/users/5597/anthony-williams (boost.thread의 저자) : p –

+0

C++ 커뮤니티의 주된 철학은 " 당신은 요구한다 ". Boost 프로젝트는 STL과 마찬가지로 템플릿을 사용하여 모든 라이브러리를 설계함으로써 철학을 따르려고 노력하고 있습니다. 당신이 언급 한 것처럼 비용은 있지만 이해가 때때로 어려워집니다. 라이브러리를 원한다면 좀 더 쉽게 이해할 수 있습니다. 아마도 Qt 라이브러리를 살펴 봐야 할 것입니다. Boost가하는 것의 많은 것을 포함합니다. 제 의견으로는 Qt의 디자인은 대규모 C++ 개발을 가능하게합니다. Boost는 완전히 부족합니다. –

답변

20

템플릿은 가상 함수가 필요없이 컴파일 시간에 고도로 최적화 될 수 있습니다. 많은 템플릿 트릭은 컴파일 타임 다형성으로 생각할 수 있습니다. 컴파일 타임에 어떤 행동을 원하는지 알기 때문에 클래스를 사용할 때마다 가상 함수 호출을 지불해야하는 이유는 무엇입니까? 보너스로 많은 템플릿 코드가 가장 기본적인 함수 호출 오버 헤드를 제거하기 위해 쉽게 인라인 될 수 있습니다.

또한 C++의 템플릿은 매우 강력하고 융통성이 있습니다. 그 자체만으로 완벽한 언어로 보여졌습니다. 런타임 다형성으로 훨씬 더 많은 작업이 필요한 템플릿을 사용하여 쉽게 수행 할 수있는 몇 가지 사항이 있습니다.

3

템플릿을 사용하면 일반 버전의 알고리즘을 수행 할 수 있습니다. 컨테이너의 일반 버전. 더 이상 유형에 대해 걱정할 필요가 없으며 더 이상 필요하지 않은 유형을 필요로하지 않습니다. Boost는 일상 생활에서 C++을 사용하는 다양한 사람들의 요구를 해결하려는 라이브러리 모음입니다.