이번 포스팅에선 실용적으로 템플릿을 사용할 수 있는 방법에 대해 다뤄볼까 한다. 포함 모델 템플릿 소스를 구성하는 방식은 여러가지가 있지만, 그중에서도 가장 흔하게 사용되는 방식인 포함 모델에 대해 다뤄보고자 한다. 링커 오류 일반적으로 C/C++에선 코드를 헤더와 소스로 구성한다. 하지만 함수 템플릿을 다음과 같이 일반적인 코드처럼 헤더와 소스로...
[C++ Template] 9. 템플릿의 실제 사용
[C++ Template] 8. 컴파일 과정 프로그래밍
이번 포스팅에서는 컴파일 과정 프로그래밍에 대해 다뤄볼까 한다. 메타프로그래밍 템플릿은 기본적으로 컴파일 과정에서 인스턴스화된다. 그러므로 템플릿의 특성을 인스턴스 과정과 결합시키면 c++ 언어 자체적으로 ‘프로그램을 계산’ 할 수 있다. 다음 코드를 보자, 템플릿을 활용해 컴파일 시점에 값에 대한 소수 판별 여부를 구할 수 있다. template...
[C++ Template] 7. 인자 전달 방식
이번 시간에는 보다 인자 전달 방식에 대해 다뤄볼까 한다. Call by Value 인자를 값으로 전달할 경우 원치적으로 모든 인자는 복사된다. 특히 복사를 통해 객체를 생성할 경우 복사 생성자를 통해 초기화된다. 기본적으로 복사 생성자 호출은 비용이 많이 드는 작업이다. 하지만 인자를 값으로 전달하더라도 다양한 방법으로 비싼 복사 연산을 피할 수...
[책 리뷰] 말의 공식
“인생을 변화시키고 싶다면 말하는 방식부터 바꿔라!” 이 책을 한마디로 정리하자면 제목 그대로 말의 공식, 즉 ‘말 잘하는 방법’을 상당히 잘 설명하고 있다. 가격도 저렴하고 분량도 크게 부담이 없으며 주변 사람들에게 꼭 추천하고 싶은 책이다. 개인적으로 나처럼 무언가를 요구하는 것을 힘들어 하는 사람들이 읽으면 아주 도움이 될 듯 하다. 나는 ...
[C++ Template] 6. 이동 의미론과 enable_if
이번 포스팅에서는 이동 의미론(move semantics)과 관련된 템플릿 문법과 enable_if를 활용한 조건부 템플릿 활성화를 다룰 예정이다. 완벽한 전달 전달된 인자의 기본 속성을 전달하는 일반 코드를 작성하고자 한다. 수정 가능한 상태 (참조) 읽기 전용 객체 (상수) 이동 가능한 객체 (우측값 참조) 이때 인자를 전달하는 ...
[NGINX 기본기 다지기] 6. 보안 제어
이번 포스팅에서는 Nginx를 활용한 보안 제어 기능을 다뤄볼까 한다. IP 주소 기반 접근 제어 ngx_http_access_module을 통해 리소스에 대한 접근을 제어할 수 있다. location /admin/ { deny 10.0.0.1; allow 10.0.0.0/20; allow 2001:0db8::/32; d...
[C++] simdjson을 활용해 Json 데이터 고속 파싱하기
기존 코드베이스에선 c++ json 파싱 라이브러리로 rapidjson을 사용하였으나, 최근 새로운 코드베이스를 작성하면서 simdjson를 도입하게 되었다. 성능과 사용성 둘 다 rapidjson보다는 좋다고 판단하였다. simdjson Git: simdjson: Parsing gigabytes of JSON per second “simdjso...
[C++] Awesome Modern C++
최근 어쩌다 발견한 웹사이트인데 한번쯤 참고삼아 읽어보기엔 좋을 듯 하다. Link: Awesome Modern C++ 책, 커뮤니티, 그 외 유용한 c++ 라이브러리 및 툴 등이 소개되어 있다.
[C++] zpp_bits을 활용해 데이터 직렬화 하기
최근 데이터 전송 모듈을 개발하면서 zpp_bits 라는 라이브러리를 사용하게 되었다. (사실 예전부터 눈여겨 보고 있었으나, 그간 딱히 쓸 일이 없었다..) zpp_bits Repo: zpp::bits “A modern C++20 binary serialization and RPC library, with just one header file.”...
[C++ Template] 5. 까다로운 기초 지식
이번 포스팅에서는 보다 기본적이면서도 까다로운 템플릿 관련 C++ 기초 지식에 대해 다뤄볼까 한다. (기초 아닌 기초) typename 키워드 typename 키워드는 템플릿 내 식별자(identifier)가 타입임을 명시하기 위해 도입되었다. template<typename T> class MyClass { public: ...