C++ 테크니컬 리포트 1

C++ Technical Report 1

C++ 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]

수치 설비

난수생성

수학적 특수 함수

수학 특수 함수 및 특정 C99 추가와 같은 TR1의 일부 기능은 TR1의 Visual C++ 구현에 포함되지 않습니다.수학 특수 함수 라이브러리는 C++11에서 표준화되지 않았습니다.

  • 에의 추가<cmath>/<math.h>헤더 파일–beta,legendre,기타.

이러한 기능은 공학 및 과학 분야의 프로그래머들에게 주요 관심사가 될 것입니다.

다음 표에는 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 );
구면 노이만 함수

제2종 구면 베셀 함수

double sph_neumann(부호 없음n, double x );

각 기능에는 두 가지 추가 변형이 있습니다.함수 이름에 접미사 'f' 또는 'l'을 추가하면 다음에서 작동하는 함수를 얻을 수 있습니다.float또는long double값을 지정합니다.예를 들어 다음과 같습니다.

흘러가다 sph_neumannf( 서명되어 있지 않다 n, 흘러가다 x ) ;  이중으로 하다 sph_neumannl( 서명되어 있지 않다 n,  이중으로 하다 x ) ; 

컨테이너

태플 타입

  • 신규<tuple>헤더 파일–tuple
  • Boost Tuple[7] 라이브러리 기반
  • 기준의 막연한 연장std::pair
  • 다른 유형의 요소의 고정 크기 집합

고정 크기 배열

  • 신규<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는 제안을 요구합니다.

일부 제안에는 다음이 포함되었다.

TR2 제안 콜이 발행된 후 ISO 절차가 변경되었기 때문에 TR2는 존재하지 않습니다.대신 C++의 확장 기능은 다수의 기술사양에 게재될 예정입니다.상기 제안 중 일부는 이미 C++ 표준 또는 기술사양서 초안에 포함되어 있습니다.

「 」를 참조해 주세요.

  • C++11, C++ 프로그래밍 언어 표준; 라이브러리 개선은 TR1에 기반하였습니다.
  • C11(C 표준 개정판), C 프로그래밍 언어의 최신 표준
  • Boost Library(부스트 라이브러리), 휴대용 C++ 라이브러리의 대규모 컬렉션.이 중 일부는 TR1에 포함되어 있습니다.
  • 현재 C++ 표준 라이브러리의 일부인 표준 템플릿 라이브러리

레퍼런스

  1. ^ "ref - 1.72.0". www.boost.org.
  2. ^ "Boost.SmartPtr: The Smart Pointer Library - 1.72.0". www.boost.org.
  3. ^ "Chapter 16. Boost.Function - 1.72.0". www.boost.org.
  4. ^ "Chapter 1. Boost.Bind - 1.72.0". www.boost.org.
  5. ^ "Chapter 1. Boost.Member Function - 1.72.0". www.boost.org.
  6. ^ "Chapter 1. Boost.TypeTraits - 1.37.0". www.boost.org.
  7. ^ "The Boost Tuple Library – Boost 1.48.0". Archived from the original on 2006-05-26. Retrieved 2006-05-27.
  8. ^ "Chapter 5. Boost.Array - 1.72.0". www.boost.org.
  9. ^ "Boost.Regex - 1.36.0". www.boost.org.

원천

외부 링크