728x90

cpp 5

[cpp] type_traits

컴파일 타임에 type을 체크하는 type_traits type_traits 란?경량 임베디드에 사용 가능한 STL을 만드는 HSTL이라는 Toy project를 하는 중인데제일 처음 type_traits를 만들어야 한다고 함 type_traits은컴파일 타임에 type을 체크하는 용도템플릿 메타 프로그래밍의 기본 요소템플릿은 “모든 타입을 다 받을 수” 있지만, 특정 타입에서만 다르게 처리하고 싶을 때가 많음즉, 컴파일 타임 조건문(static if) 을 만드는 기반#ifndef HSTL_TYPE_TRAITS_H#define HSTL_TYPE_TRAITS_Hnamespace hstl {// integral_constanttemplate struct integral_constant { static..

TIL/2025 2025.09.24

[cpp] Request and Suppress (=default, =delete)

— 의도를 코드에 담는 방법C++ 코드를 작성하다 보면 컴파일러가 자동 생성해주는 부분이 있어요.대표적인 게 바로 기본 생성자, 복사 생성자, 소멸자 같은 특별 멤버 함수들이죠. 그럼 지금 그 코드 과연 내 의도가 잘 담긴 코드일까?이 질문에서 출발해 default 와 delete 키워드를 깊게 알아봤어요. default를 써야 했던 순간처음에는 단순한 클래스였어요.class MyObject {public: MyObject(int number) { std::cout 이때 int 생성자를 하나 추가했는데, 갑자기 MyObject obj; 에서 오류가 났어요“엥? 왜 안 되지?” 하다가 찾아보니,사용자가 생성자를 하나라도 정의하면, 컴파일러는 기본 생성자를 만들어주지 않는다라는 규칙 때문..

TIL/2025 2025.09.08

[cpp] Lambda Functions

그냥 함수를 쓰면 될 것 같은데 왜 귀찮게 Lambda 함수 쓰는지 알아보자 람다 함수 생김새를 살펴보자일단 Lambda 함수의 문법을 보자아주 요상하게 생겼다[] () -> {...}[] : Captures the used variables() : Parameters-> : Return value{} : Function body아직 뭔지 잘 모르겠다함수랑 비슷하면서도 다르다 Function vs Function ObjectCompiler는 람다함수 구현체를 Class instance 형태로 해석해요해당 클래스에서 operator () 연산자를 재정의 하는게 핵심이죠 이 클래스의 객체를 생성한 것을 function object라고 불러요 만약, 아래의 람다 함수를 정의했다면auto addObj = ..

TIL/2025 2025.08.25

Guard Clause를 통해 바라본 Clean Code와 MISRA Rule의 차이

웹 개발을 할 때 Guard Clause는 가독성 향상, 코드 간결성 증가를 위한 기본 규칙이었다.그런데 Misra Cpp 규칙에서는 1entry-1exit 규칙이 있어 Guard Clause 사용 자체가 불가능 했다. 상충되는 철학을 가진 두 규칙Guard Clause가독성과 유지보수성에 중점Clean Code 철학조건이 맞지 않으면 함수 초반에 바로 반환해 코드 중첩을 줄이자 int process(int value) { if (value 1Entry-1Exit안전성과 제어 흐름 예측 가능성에 초점MISRA C++ 규칙함수에는 진입점과 종료점이 각각 하나만 존재int process(int value) { int result = 0; if (value 도메인 별 코딩 규칙 철..

TIL/2025 2025.08.15

나만의 C++ 문자열 클래스 만들기, GuString

📢 언어를 효과적으로 학습하는 방법은 무언가를 만들어보는 것이죠. C++의 std::string을 구현해보며 C++을 익혀봤어요. 이름하여 GuString클래스! 전체 여정은 아래와 같아요namespace Gu {...} 안에 모든 것들을 구현했죠 기본적으로 Class 구현 시 Class 내부에는 함수 선언만 존재하고 Class 외부에 함수 구현을 해요컴파일 시간 단축 (h, cc 파일 구분 시)정보 은닉코드 관리 편리 (협업 및 유지보수)재사용성 및 의존성 최소화※ 단, 템플릿 클래스는 함수 구현도 class 내에 존재 Step 1. 문자열 길이와 복사 함수 직접 만들기먼저 C표준 라이브러리를 대체 할 strlen, strcpy를 구현했어요namespace Gu { ... static ..

TIL/2025 2025.04.24
728x90