일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스마트 포인터
- 상속
- resource management class
- c++
- exception
- 예외
- 영화 리뷰
- 영화
- more effective c++
- virtual function
- Effective c++
- 메타테이블
- 게임
- 반복자
- lua
- 비교 함수 객체
- Vector
- operator new
- 루아
- 암시적 변환
- 다형성
- 참조자
- 오블완
- UE4
- implicit conversion
- effective stl
- reference
- 티스토리챌린지
- Smart Pointer
- 언리얼
Archives
- Today
- Total
스토리텔링 개발자
[Effective C++] 54. 모던 C++ 기능 본문
728x90
항목 54 : TR1을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자
C++ 차기 버전
- C++0x 라고 불렸지만, 실제로 반영되고 나서의 이름은 C++11.(모던 C++)
- TR1(C++ 라이브러리 작업 그룹이 작성한 "1차 기술 보고서(Technical Report 1)")의 대부분은 C++11에 포함되었다.
각 라이브러리 구성요소
- C++98 표준 C++ 라이브러리 주 구성요소
- 표준 템플릿 라이브러리(STL)
- 컨테이너, 반복자, 알고리즘, 함수 객체 등
- iostream
- 사용자 정의 버퍼링
- 국제화 기능 가능한 입출력
- cin, cout, cerr, clog 등의 사전 정의 객체
- 국제화 지원
- 여러 로케일 활성화 기능
- wchar_t 등의 타입(대개 16비트 문자) 및 wstring(wchar_t 타입으로 정의한 string)로 유니코드 지원
- 수치 처리 지원
- 복소수를 나타내는 템플릿(complex)
- 수치 배열 템플릿(valarray)
- 에외 클래스 계통
- exception 및 파생 클래스
- C89의 표준 라이브러리
- 1989년 버전의 C에 포함된 표준 라이브러리는 C++에도 모두 포함
- 표준 템플릿 라이브러리(STL)
- TR1 구성요소(C++11로 포함되어 승격됨)
- 스마트 포인터(smart pointer)
- shared_ptr, weak_ptr 등
- 참조 카운팅(reference counting) 기능의 똑똑한 포인터
- 순환 구조 문제가 발생할 수 있기에 weak_ptr을 사용한다.
- function
- 어떤 함수의 시그니처와 호환되는 시그니처를 갖는 함수호출성 개체(callable entity) 템플릿.
- 시그니처가 비슷하면 호출이 가능한 일반화 콜백 함수를 만들어 보자는 것이 주요 개념이다.
-
void registerCallback(std::string func(int)); // 이렇게도 가능하다. void registerCallback(std::string (int)); // 여기서 std::string(int) 부분이 바로 함수 시그니처다. // 바로 이 때 function 템플릿을 사용하면 registerCallback을 융통성 있게 사용할 수 있다. void registerCallback(std::function<std::string (int)> func); // 매개변수 func는 // 이제 std::string (int)와 호환되는 시그니처를 갖는 어떤 함수호출성 개체도 될 수 있다.
- bind
- 이전 바인더(bind1st, bind2nd)와 달리 상수 멤버 함수 및 비상수 멤버 함수에 상관없이 동작한다.
- 참조로 전달되는 매개변수에 대해서도 동작한다.
- 외부 보조 없이 함수 포인터를 자체적으로 다룰 수 있다.
- bind를 호출하기 전에 ptr_fun, mem_fun, mem_fun_ref를 우겨넣는 난리를 피울 필요가 없다.
- 항목 35 참조
- 해시 테이블(hash table)
- 해시 테이블을 사용한 새로운 셋, 멀티셋, 맵, 멀티맵
- 인터페이스는 이전 연관 컨테이너의 인터페이스를 본떠 만들어졌다.
- unordered_set, unordered_multiset, unordered_map, unordered_multimap
- 원소가 저장되는 순서를 예측할 수 없다는 점을 강조하는 듯한 인상이다.
- 정규 표현식(regular expression)
- 정규 표현식 기반의 탐색과 문자열에 대한 대체 연산이 가능하다.
- 일치되는 원소들 사이의 순회도 지원한다.
- 튜플(tuple)
- 종래 pair 템플릿의 신세대 버전
- tuple 객체는 몇 개든 담을 수 있다.
- array
- begin, end 등을 지원하는 배열.
- array 객체의 크기는 컴파일 과정에서 고정된다.
- mem_fn
- 멤버함수 포인터를 적응(adapt)시키는 용도로 쓸 수 있다.
- bind처럼, mem_fun, mem_fun_ref를 그대로 껴안으며 확장했다.
- reference_wrapper
- 기존의 참조자가 객체처럼 행세할 수 있도록 만들어주는 템플릿.
- 참조자를 담은 것처럼 동작하는 컨테이너를 만들 수 있다.
- 난수 발생
- C의 rand 함수보다 몇 배는 우수한 난수 발생 기능
- 특수 용도의 수학 함수
- 라게르(Laguerre) 다항식, 베셀(Bessel) 함수, 완전 타원 적분(complete eliptic integral) 등
- C99 호환성 확장 기능
- C99의 새로운 라이브러리를 C++로 가져올 목적으로 설계된 함수 및 템플릿 모음
- 타입 특성 정보(type traits)
- result_of
- 어떤 함수 호출의 반환 타입을 추론해 주는 템플릿.
- 템플릿을 만들다 보면 어떤 함수(템플릿)의 호출로 인해 반환되는 객체의 타입을 참조할 수 있으면 좋겠다는 생각이 꽤 자주 든다.
- 반환 타입이 그 함수의 매개변수 타입에 따라 달라질 수 있기 때문에..
- 스마트 포인터(smart pointer)
부스트의 TR1스러운 라이브러리를 써보고자 할 때의 꼼수
// std::tr1 네임스페이스는 이제 boost 네임스페이스의 별칭으로 설정된다.
namespace std
{
namespace tr1 = ::boost;
}
- 하지만 이 경우 미정의 구현이다.(항목 25 함조)
- std 네임스페이스에는 일개 사용자 수준에서 어떤 것도 추가할 권한이 없기 때문이다.
728x90
'개발 > Effective C++' 카테고리의 다른 글
[Effective C++] 55. 부스트 라이브러리 (0) | 2024.07.30 |
---|---|
[Effective C++] 53. 컴파일러 경고 문제 (0) | 2024.07.29 |
[Effective C++] 52. 위치지정 new / delete (0) | 2024.07.26 |
[Effective C++] 51. operator new / delete 커스텀 관례 (0) | 2024.07.25 |
[Effective C++] 50. operator new / delete는 언제 커스텀해야 할까? (2) | 2024.07.24 |
Comments