C++ 테크니컬 리포트 1
C++ Technical Report 1C++ Technical Report 1(TR1)은 ISO/IEC TR 19768, C++ Library Extensions의 공통명으로, C++03 언어 표준의 C++ 표준 라이브러리에 추가할 것을 제안한 문서입니다.추가된 기능에는 정규 표현식, 스마트 포인터, 해시 테이블 및 난수 생성기가 포함됩니다.TR1은 표준 자체가 아니라 초안 문서였습니다.그러나 대부분의 제안서는 나중에 공식 표준인 C++11의 일부가 되었다.C++11이 표준화되기 전에 벤더는 이 문서를 확장자를 작성하기 위한 가이드로 사용했습니다.이 보고서의 목표는 "확장된 C++ 표준 라이브러리를 위한 보다 광범위한 기존 프랙티스를 구축하는 것"이었다.
이 보고서는 2005년 C++ 라이브러리 확장에 관한 기술 보고서 초안 형식으로 배포된 후 2007년 ISO/IEC 표준으로 ISO/IEC TR 19768:2007로 발행되었습니다.
개요
컴파일러는 C++ 표준을 준수하기 위해 TR1 컴포넌트를 포함할 필요가 없었습니다.이는 TR1 제안서가 표준 자체의 일부가 아니라 아직 비준되어야 할 일련의 가능한 추가 사항만 포함했기 때문입니다.그러나 TR1의 대부분은 Boost에서 구할 수 있었고 몇몇 컴파일러/라이브러리 디스트리뷰터가 컴포넌트의 전부 또는 일부를 구현했습니다.TR1은 C++11에 나타난 라이브러리에 추가된 완전한 목록이 아닙니다.예를 들어 C++11에는 TR1에서는 사용할 수 없는 스레드 지원 라이브러리가 포함되어 있습니다.
새로운 컴포넌트는std::tr1
네임스페이스를 사용하여 현재 표준 라이브러리와 구분합니다.
구성 요소들
TR1에는 다음 컴포넌트가 포함되어 있습니다.
일반 유틸리티
참조 래퍼– 참조를 복사하지 않고 알고리즘이나 함수 객체에 전달할 수 있습니다.이 기능은 Boost를 기반으로 했습니다.참조.[1] 템플릿 클래스의 인스턴스에서 래퍼 참조를 가져옵니다.reference_wrapper
. 래퍼 참조는 C++ 언어의 일반 참조('&')와 유사합니다.개체에서 템플릿 클래스를 래퍼 참조를 가져오려면ref
(항상 참조하기 위해)가 사용됩니다.cref
사용되고 있습니다).
래퍼 참조는 특히 템플릿 함수에 도움이 됩니다.인수 추론이 참조를 추론하지 않는 경우(예를 들어 인수를 전송하는 경우)
#실패하다 <iostream> #실패하다 <tr1/기능> 무효 f( 인트 &r ) { ++r; } 템플릿< > 학급 기능, 학급 아르그 > 무효 g( 기능 f, 아르그 t ) { f(t); } 인트 주된() { 인트 i = 0; g( f, i ); // 'g < void (int & r ), int > 가 인스턴스화 됩니다. 표준::외치다 << > i << > "\n"; // 출력: 0 g( f, 표준::tr1::레퍼런스(i) ); // 'g < void (int & r ), reference_displays <int >' 가 인스턴스화 됩니다. 표준::외치다 << > i << > "\n"; // 출력: 1 }
스마트 포인터 – 복잡한 경우 개체 수명 관리를 단순화하는 여러 클래스를 추가합니다.다음 세 가지 주요 클래스가 추가됩니다.
shared_ptr
– 참조 검색 스마트 포인터weak_ptr
– 의 변종shared_ptr
참조 카운트를 늘리지 않습니다.
제안은 Boost Smart Pointer [2]라이브러리를 기반으로 합니다.
함수 객체
이들 4개의 모듈이 에 추가됩니다.<functional>
헤더 파일:
다형 함수 래퍼(function
): 지정된 함수콜시그니처를 사용하는 콜 가능한 함수(함수 포인터, 멤버 함수 포인터 및 함수 오브젝트)를 저장할 수 있습니다.타입은, 사용하는 콜 가능의 종류에 의존하지 않습니다.Boost를 기반으로 합니다.기능[3]
함수 객체 바인더(bind
): 임의의 파라미터와 함수개체를 바인드할 수 있습니다.함수 구성도 허용됩니다.이것은 표준의 일반화된 버전입니다.std::bind1st
그리고.std::bind2nd
바인드 함수이 기능은 Boost Bind [4]라이브러리를 기반으로 합니다.
함수 반환 유형(result_of
): 콜 표현의 유형을 결정합니다.
멤버 함수(mem_fn
) – 표준 강화std::mem_fun
그리고.std::mem_fun_ref
멤버 함수에 대한 포인터를 함수 객체로 취급할 수 있습니다.Boost Mem Fn [5]라이브러리를 기반으로 합니다.
메타프로그래밍 및 유형 특성
지금 있다<type_traits>
다음과 같은 많은 유용한 특성 메타데이터를 포함하는 헤더 파일is_pod
,has_virtual_destructor
,remove_extent
다른 유형 간에 쿼리 및 변환을 활성화하여 메타프로그래밍을 용이하게 합니다.이 제안은 부스트 타입 특성 라이브러리를 기반으로 합니다.[6]
수치 설비
난수생성
- 신규
<random>
헤더 파일–variate_generator
,mersenne_twister
,poisson_distribution
,기타. - 여러 의사 난수 생성기, 엔진 및 확률 분포를 사용하여 난수를 생성하는 유틸리티
수학적 특수 함수
수학 특수 함수 및 특정 C99 추가와 같은 TR1의 일부 기능은 TR1의 Visual C++ 구현에 포함되지 않습니다.수학 특수 함수 라이브러리는 C++11에서 표준화되지 않았습니다.
이러한 기능은 공학 및 과학 분야의 프로그래머들에게 주요 관심사가 될 것입니다.
다음 표에는 TR1에 설명된 23가지 특수 기능이 모두 나와 있습니다.
기능명 | 기능 프로토타입 | 수식 |
---|---|---|
관련 라게르 다항식 | double assoc_laguerre(부호 없음n, 부호 없음m, double x ); | |
연관된 Legendre 다항식 | double assoc_secre(부호 없는 l, 부호 없는 m, double x ); | |
베타 함수 | 더블 베타( double x, double y ); | |
제1종 완전 타원 적분 | double comp_ellint_1(double k ); | |
두 번째 종류의 완전한 타원 적분 | double comp_ellint_2(double k ); | |
세 번째 종류의 완전한 타원 적분 | double comp_ellint_3( double k, double nu ); | |
합류 초기하 함수 | double conf_double a, double c, double x ), | |
규칙적인 수정된 원통형 베셀 함수 | double cyl_besel_i(double nu, double x ); | |
제1종 원통형 베셀 함수 | double cyl_besel_j( double nu, double x ); | |
불규칙하게 수정된 원통형 베셀 함수 | double cyl_besel_k(double nu, double x ); | |
원통형 노이만 함수 | double cyl_neumann(double nu, double x ); | |
첫 번째 종류의 불완전한 타원 적분 | double elint_1(double k, double phi ); | |
두 번째 종류의 불완전한 타원 적분 | double elint_2(double k, double phi ); | |
세 번째 종류의 불완전한 타원 적분 | double elint_3( double k, double nu, double phi ); | |
지수 적분 | double expint ( double x ) ; | |
에르미트 다항식 | double hermite(부호 없음n, double x ); | |
하이퍼기하 급수 | double hyperg( double a, double b, double c, double x ); | |
라구에르 다항식 | double laguerre(부호 없음n, double x ); | |
르장드르 다항식 | double legendre(부호 없는 l, double x ); | |
리만 제타 함수 | double riemann_zeta ( double x ) ; | |
제1종 구면 베셀 함수 | double sph_besel(부호 없음n, double x ); | |
구면 관련 Legendre 함수 | double sph_secre(부호 없는 l, 부호 없는 m, double theta ); | |
구면 노이만 함수 | double sph_neumann(부호 없음n, double x ); |
각 기능에는 두 가지 추가 변형이 있습니다.함수 이름에 접미사 'f' 또는 'l'을 추가하면 다음에서 작동하는 함수를 얻을 수 있습니다.float
또는long double
값을 지정합니다.예를 들어 다음과 같습니다.
흘러가다 sph_neumannf( 서명되어 있지 않다 n, 흘러가다 x ) ; 긴 이중으로 하다 sph_neumannl( 서명되어 있지 않다 n, 긴 이중으로 하다 x ) ;
컨테이너
태플 타입
고정 크기 배열
- 신규
<array>
헤더 파일–array
- Boost Array[8] 라이브러리에서 가져온
- 표준과 같은 동적 어레이 유형과 달리
std::vector
해시 테이블
- 신규
<unordered_set>
,<unordered_map>
헤더 파일 - 실장하고 있습니다.
unordered_set
,unordered_multiset
,unordered_map
,그리고.unordered_multimap
클래스, 유사set
,multiset
,map
,그리고.multimap
,각각 다음과 같다.- 불행하게도,
unordered_set
그리고.unordered_multiset
와 함께 사용할 수 없습니다.set_union
,set_intersection
,set_difference
,set_symmetric_difference
,그리고.includes
동작하는 표준 라이브러리 기능set
그리고.multiset
- 불행하게도,
- 기존 라이브러리에서 파생되지 않은 새로운 구현, 기존 라이브러리와 완전히 호환되지 않는 API
- 모든 해시 테이블과 마찬가지로 종종 요소의 지속적인 시간 검색을 제공하지만 최악의 경우 컨테이너 크기가 선형일 수 있습니다.
정규 표현
- 신규
<regex>
헤더 파일–regex
,regex_match
,regex_search
,regex_replace
,기타. - Boost RegEx[9] 라이브러리 기반
- 패턴 매칭 라이브러리
C 호환성
C++는 C 프로그래밍 언어와 호환되도록 설계되어 있지만 규격이 다르기 때문에 C의 엄밀한 슈퍼셋은 아닙니다.TR1은 <complex>, <locale>, <cmath> 등 C++ 라이브러리의 다양한 헤더에 추가함으로써 이러한 차이 중 일부를 조정하려고 합니다.이러한 변경에 의해 C++는 C규격의 C99버전에 준거할 수 있습니다(C99의 모든 부분이 TR1에 포함되는 것은 아닙니다).
테크니컬 리포트 2
2005년에는 Unicode, XML/HTML, 네트워킹 및 초보 프로그래머를 위한 유용성에 특별한 관심을 가지고 TR2에 대한 제안을 요청했습니다.TR2는 제안을 요구합니다.
일부 제안에는 다음이 포함되었다.
- 스레드 [1]
- Asio C++ 라이브러리(네트워킹 [2][3]).
- 신호/슬롯 [C++ 라이브러리 TR2에서의 표준화를 위한 sigc 제안][4]
- TR2용 파일 시스템 라이브러리 파일 시스템 라이브러리– Boost 파일 시스템 라이브러리를 기반으로 경로, 파일 및 디렉토리를 쿼리/관리합니다.
- TR2에 대한 모든 라이브러리 활성화 제안
- TR2를 위한 어휘 변환 라이브러리 제안
- TR2의 새로운 문자열 알고리즘 제안
- TR2 ISO/IEC JTC1/SC22/WG21의 수치 라이브러리의 대수적 속성의 보다 완전한 분류를 위하여 - Papers 2008
- TR2에 대한 관련 컨테이너에 이기종 비교 조회 추가 [5]
TR2 제안 콜이 발행된 후 ISO 절차가 변경되었기 때문에 TR2는 존재하지 않습니다.대신 C++의 확장 기능은 다수의 기술사양에 게재될 예정입니다.상기 제안 중 일부는 이미 C++ 표준 또는 기술사양서 초안에 포함되어 있습니다.
「 」를 참조해 주세요.
- C++11, C++ 프로그래밍 언어 표준; 라이브러리 개선은 TR1에 기반하였습니다.
- C11(C 표준 개정판), C 프로그래밍 언어의 최신 표준
- Boost Library(부스트 라이브러리), 휴대용 C++ 라이브러리의 대규모 컬렉션.이 중 일부는 TR1에 포함되어 있습니다.
- 현재 C++ 표준 라이브러리의 일부인 표준 템플릿 라이브러리
레퍼런스
- ^ "ref - 1.72.0". www.boost.org.
- ^ "Boost.SmartPtr: The Smart Pointer Library - 1.72.0". www.boost.org.
- ^ "Chapter 16. Boost.Function - 1.72.0". www.boost.org.
- ^ "Chapter 1. Boost.Bind - 1.72.0". www.boost.org.
- ^ "Chapter 1. Boost.Member Function - 1.72.0". www.boost.org.
- ^ "Chapter 1. Boost.TypeTraits - 1.37.0". www.boost.org.
- ^ "The Boost Tuple Library – Boost 1.48.0". Archived from the original on 2006-05-26. Retrieved 2006-05-27.
- ^ "Chapter 5. Boost.Array - 1.72.0". www.boost.org.
- ^ "Boost.Regex - 1.36.0". www.boost.org.
원천
- ISO/IEC JTC1/SC22/WG21 — Draft Technical Report on C++ Library Extensions (PDF) (Report). 2005-06-24.
- ISO/IEC TR 19768:2007 — Information technology — Programming languages — Technical Report on C++ Library Extensions (Report). Nov 2007.
- Becker, Peter (2006). The C++ Standard Library Extensions: A Tutorial and Reference. Addison-Wesley Professional. ISBN 0-321-41299-0.
외부 링크
- Scott Meyers의 Effective C++: TR1 Information – TR1 라이브러리의 배경과 근거를 제공하는 TR1 제안 문서에 대한 링크가 포함되어 있습니다.