4.6 동시성 c++11에서 동시성 기능이 처음으로 도입되었다. thread: 새로운 실행 경로를 위한 클래스 async: 함수를 비동기로 호출 atomic: 인터리브(Interleave) 되지 않은 값에 접근하기 위한 클래스 템플릿 mutex: 상ㅎ호 배타적인 실행을 조정하는 클래스 future: thread로부터 결과를 받기위한 클래스 템플릿 promise: future를 위해 값을 저장하는 템플릿 여기서는 비동기로 동작하면 인터럽트 가능한 프로그램을 구현해보고자 한다 비동기식(Asynchrony): 프로그램을 실행하는 동안 다음모델에서 작업 가능 인터럽트 가능성(Interruptibility): 새로운 모델이 더 좋으면 이전 모델을 중단 class interruptible_iteration { pu..
4.5 지금 시각은? 라이브러리는 타입 세이프한 시계 및 타이머 기능을 제공 클럭을 기준으로 특정 시점을 나타내는 time_point 명백한 의미를 지닌 duration time_point now = system_clock::now(), then = now + hours(2); time_t then_time = system_clock::to_time_t(then); cout eps); return sq; } time_point start = steady_clock::now(); for( int i = 0; i < rep; i++) { r3 = my_root(3.0); } auto end = steady_clock::now(); cout
4.4 유틸리티 튜플 새로운 클래스를 구현하지 않고 여러결과를 반환하기 위해 튜플(Tuple)을 사용 대부분의 컨테이너와는 달리, 개체의 개수를 컴파일 타임에 알고 있어야 함 void lu(const matrix& A, matrix& LU, vector& p) {...} tuple lu(const matrix& A) { matrix LU(A) vector p(n) ... //둘다 반환값은 동일 return tuple(LU, p); return make_tuple(LU, p); //헬퍼 함수 } int main() { tuple t = lu(A); //튜플의 값을 가져올때는 get함수를 통해 추출한다 matrix LU = get(t); vector p = get(t); //모두 추론 가능하기에 위와 동일 ..
4.3 메타 프로그래밍 한계 헤더를 포함해야함 내장 타입별 정보를 전달하는 클래스 템플릿 numeric_limits template inline void test(const T& x) { cout
7장 REST 서비스 사용하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 RestTemplate 을 사용해서 REST API 사용하기 스프링에서 사용하는 REST API RestTemplate: 스프링 프레임워크에서 제공하는 동기화된 REST client Traverson: 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST client WebClient: 스프링 5에서 소개된 반응형 비동기 REST client RestTemplate 는 다음 버전에서 deprecated 될 예정이다. WebClient 를 사용하자 7.1 RestTemplate으로 REST endpoint 사용하기 RestTamplat..
라이브러리 4.1 표준 템플릿 라이브러리 표준 템플릿 라이브러리(Standard Template Library, STL)는 기본 라이브러리 Alex Stepanov,David Musser가 만든 STL대부분은 C++표준 라이브러리의 일부가 됨 Matt Austern 은 STL의 핵심 개발자 Josuttis는 라이브러리 튜토리얼을 작성 도입 예제 컨테이너는 개체를 포함하는 클래스 대표적을 vector와 list 클래스가 있다. std::vector vec; std::list lst; double vec_sum = std::accumulate(begin(vec), end(vec), 0.0); double lst_sum = std::accumulate(begin(lst), end(lst), 0.0); 반복자 ..
3.10 가변 템플릿(Variadic Template) 가변 템플릿은 ...으로 표시된 줄임표 연산자를 사용 왼쪽에 ... 연산자가 있으면 패킹 오른쪽에 ... 연산자가 있으면 언패킹 typename ...P : 복수의 타입 인수를 타입 팩 P에 패킹 : 클래스나 함수템플릿을 인스턴스화 할때 P를 언패킹 P ...p : 변수 팩 p에 여러 함수 인수를 패킹 sum(p...) : 변수 팩 p를 언패킹하고 여러 인수로 sum함수 호출 리턴타입은 첫번째 인수의 타입으로 정해짐 template inline T sum(T t) { return t; } template inline T sum(T t, P ...p) { return t + sum(...p); } auto s = sum(-7, 3.7f, 9u, -2...
6장 REST 서비스 생성하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th Front 코드와 Backend 코드 분리 Front-end tacocloud-ui directory 따로 생성 https://github.com/cusbert/spring-in-action-5th/tree/main/tacocloud-ui Back-end HATEOAS 실습 생략 https://github.com/cusbert/spring-in-action-5th/tree/main/ch6/taco-cloud HATEOAS 포함한 교재에서 제공한 샘플 코드는 실행되도록 수정하여 따로 directory 생성 https://github.com/cusbert/spring-in-acti..
3.9 람다(Lamda) (c++11) //함수를 인수로 즉시 전달할 수 있다 fin_diff([](double x) {return sin(x) + cos(x);}, 1., 0.001) //람다 표현식을 재사용하기 위해 변수에 저장할 수도 있다. auto sc_l = [](double x) { return sin(x) + cos(x); } //리턴타입을 명시적으로 선언하고자 한다면 [](double x) -> double { return sin(x) + cos(x); } 캡처 람다 표현식은 자체 매개변수 또는 이전에 캡처된 매개변수만 사용 가능 //람다를 매개변수화 할때 단순한 연산을 삽입 가능하나 //매개변수가 많을때는 생산적이지 못함 a = fin_diff([]double x) {return sin(..
3.8 펑터 펑터(Functor), 함수 개체(Functional Object) 함수처럼 호출할수 있는 연산자를 제공하는 클래스 //함수포인터를 사용한 유한 차분 double fin_diff(double f(double), double x, double h) { return (f(x + h) - f(x)) / h; } double sin_plus_cos(double x) { return sin(x) + cos(x); } int main() { cout
3.7 타입이 아닌 템플릿 매개변수 값도 템플릿 인자가 될 수 있다. 정수, bool, 토인터 타입만 가능 template class fsize_vector { using self = fsize_vector; public: using value_type= T; const static int my_size = Size; fsize_vector(int s= Size) { assert(s == Size); } self& operator=(const self& that) { std::copy(that.data, that.data + Size, data); return *this; } self operator+(const self& that) const { self sum; for (int i= 0; i < my..
템플릿 특수화 템플릿은 많은 인수타입에 대해 동일한 구현을 사용할수 있다. 그러나 일부 타입에 대해서는 다른동작을 구현해야 할때도 있다. 이를 위해 템플릿 특수화(Template Speicalization)을 사용하자. 하나의 타입에 대한 특수화 벡터 클래스에서 bool타입에 대해 특수화 bool값을 1바이트로 패킹하여 메모리 절약을 해보자. template class vector { public: explicit vector(int size) : my_size(size), data(new unsigned char[(my_size+7) / 8]) {} vector() : my_size(0) {} //상수 접근 연산자 bool operator[](int i) const { return (data[i/8] ..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.