클래스 템플릿과 함수 템플릿의 차이점을 알고 싶습니다. 각각을 사용해야하는 곳은 무엇입니까?클래스 템플릿과 함수 템플릿의 차이점
2
A
답변
4
인스턴스를 생성 할 때 클래스 템플릿은 클래스가되고 함수 템플릿은 함수가됩니다. 예를 들면 : 당신이 유형에 의해 매개 변수화 된 클래스와 함수 템플릿을 만들 때 여러 가지에서 작동 할 수있는 기능을 만들려는 경우
//Defines a template for a class that can hold two
//objects.
template<typename T1, typename T2>
struct pair {
T1 first;
T2 second;
};
//Defines a template for a function that gives the
//minimum of two values.
template<typename T>
T min(T a, T b) {
return a < b ? a : b;
}
정상 코드, 당신은 클래스 템플릿을 사용 유형.
//Deduces the types of T1 and T2, so
//for example, a pair<int, double> can be created
//by `make_pair(10, 1.2)`
template<typename T1, typename T2>
pair<T1, T2> make_pair(T1&& t1, T2&& t2) {
return {std::forward<T1>(t1), std::forward<T2>(t2)};
}
클래스 템플릿 값으로 유형을 사용하여 컴파일 시간에 실행 프로그램 (작성하는 데 사용할 수 있습니다
기능 템플릿은 공장 기능을 만드는 데 유용 할 수 있습니다 타입 추론을 할 수있다 , 패턴 매칭이 순수한 함수로 템플릿 인스턴스화).
//Removes all `const` from a type, for example:
//`remove_const_recursive<int const*const volatile>::type`
//is the type `int*volatile`.
template<typename T> struct remove_const_recursive { typedef T type; };
template<typename T> struct remove_const_recursive<T const volatile> {
typedef typename remove_const_recursive<T>::type volatile type;
};
template<typename T> struct remove_const_recursive<T volatile> {
typedef typename remove_const_recursive<T>::type volatile type;
};
template<typename T> struct remove_const_recursive<T const> {
typedef typename remove_const_recursive<T>::type type;
};
template<typename T> struct remove_const_recursive<T&> {
typedef typename remove_const_recursive<T>::type& type;
};
template<typename T> struct remove_const_recursive<T*> {
typedef typename remove_const_recursive<T>::type* type;
};
당신이 템플릿을 사용할 때
점점 더 많은, 당신은 그들이 다양한 방법으로 사용될 수 있다는 것을 알게 될 것이다 : 이것의 간단한 예는 유형의 모든const
을 제거 클래스 템플릿의 집합입니다.
Expression templates을 사용하면 특정 유형의 코드 속도를 높이거나 도메인 특정 언어를 만들 수 있습니다.
Template metaprogramming 및 튜플을 사용하여 지루한 다양한 코드를 자동으로 작성할 수 있습니다. 또한 무딘 문법과 제한된 성능 및 템플릿의 의미 론적 힘은 그들이 제공하는 이점보다 항상 더 많은 비용이 들지는 않는다는 것을 의미합니다.
1
함수 템플릿은 인수 유형에서 특수화 유형을 추론합니다.
클래스가 할 수있는 동안 함수 템플릿을 부분적으로 특수화 할 수 없습니다.
클래스가 할 수있는 동안 함수 템플릿은 기본 템플릿 매개 변수를 가질 수 없습니다.
관련 문제
- 1. Hibernate 템플릿과 JDBC 템플릿의 차이점
- 2. 케이크의 템플릿과 뷰의 차이점
- 3. 토네이도 템플릿과 Jinja2의 차이점
- 4. WPF에서 컨트롤 템플릿과 DataTemplate의 차이점
- 5. AngularJS - 지시어와 템플릿의 차이점
- 6. Grails에서 뷰와 템플릿의 차이점
- 7. 바인딩이 데이터 템플릿의 데이터 템플릿과 작동하지 않습니다.
- 8. .cpt 템플릿과 .pt 템플릿의 차이점은 무엇입니까?
- 9. 다른 템플릿과 공통점이있는 템플릿의 사실 확인
- 10. 클래스 템플릿의 가변 멤버 함수 템플릿 인스턴스화
- 11. C++ 상속 : 템플릿의 하위 클래스 함수 호출
- 12. 클래스 템플릿의 정적 함수 포인터 멤버
- 13. 정책 클래스 템플릿의 멤버 함수 오버로드
- 14. 클래스 템플릿과 펑
- 15. 함수 템플릿의 부분 특수화
- 16. angularjs ui.bootstrap.modal 서비스의 템플릿과 templateURL의 차이점
- 17. 렌더링의 차이점 : 템플릿과 렌더링 : 레일의 부분 3
- 18. 함수 템플릿과 일반 함수를 혼합합니다.
- 19. C++ 템플릿과 외부 함수 선언
- 20. django 템플릿의 함수
- 21. 더스트 템플릿의 함수 호출
- 22. 템플릿의 sart 함수
- 23. 밑줄 템플릿의 함수 호출
- 24. 함수 템플릿의 과부하 해결
- 25. 클래스 템플릿의 인수 목록이 누락되었습니다.
- 26. 함수 템플릿의 암시 적 인스턴스화
- 27. 클래스 템플릿의 메소드 템플릿의 전체 전문화
- 28. 클래스 템플릿의 특수 생성자
- 29. 면도날 엔진 템플릿의 클래스
- 30. 클래스 템플릿의 typename을 얻습니다.