본문 바로가기

c++203

[C++ Core Guidelines] I.9 템플릿으로 만든 인터페이스는 concepts 문법을 사용해서 구체화하자 I.9: If an interface is a template, document its parameters using concepts 이유인터페이스를 구체적으로 작성하여 컴파일 타임에 조건을 검사할 수 있도록 만드는 것이 좋습니다.  예시 (좋은 예)// C++20template requires input_iterator && equality_comparable_with, Val>Iter find(Iter first, Iter last, Val v){ // ... 대략 이터레이터의 first 에서 last 까지 탐색하면서 v 값을 검출하는 코드 ...}Generic porgamming 과 Concepts 문법에 대한 내용을 참고할 수 있습니다.  정리1. requires 문법을 이용하면 템플릿 파.. 2024. 7. 5.
[C++ 20] std::source_location 사용하기 [C++ 20] std::source_location 를 사용하면 현재 코드 실행 정보를 개체로 만들어 다양하게 활용할 수 있습니다. 사용을 위해선 #include 헤더를 추가해야 합니다. 기존 [C 언어] 의 __LINE__, __FILE__, __DATE__, __FUNCTION__ (C99 : __func__) 와 같이 미리 정의된 표준 매크로 의 문제점을 개선하기 위해 만들어졌습니다. 예를 들어, __FUNCTION__ 을 사용하면 함수 이름만 얻을 수 있고 함수의 반환 타입과 입력 파라미터 정보를 얻을 수 없는 문제가 있었는데 std::source_location 를 사용하면 모든 정보를 얻을 수 있습니다. (__FUNCSIG__ 같은 매크로를 사용할 수 있지만 표준이 아닙니다) 사용 예시 #i.. 2024. 4. 22.
[C++ 20] 모듈 (Module) 사용하기 C++ 20 의 모듈 시스템이란 헤더 파일을 따로 만들지 않고도 cpp 파일들만 가지고 클래스들의 메타데이터 정보를 생성해 h 파일 없이도 링킹 가능하도록 만든 것입니다. 기존에는 대형 프로젝트의 경우 헤더 파일에서 한글자만 바꾸더라도 매크로 레벨의 헤더 파일 복붙 방식 O(n*n) 이라서 하위 cpp 파일까지 전부 컴파일을 다시 했어야 했는데, 이 기능 덕분에 컴파일 속도도 매우 빨라집니다. 현대적인 언어 JAVA, C# 등은 전부 이런 방식을 이미 쓰고 있는데 C 가 워낙 오래된 언어라서 그렇습니다.. 모듈 시스템은 2017년 표준에 들어온 기능임에도, 아직 TR (Test & Review) state 로 있어서 일부 컴파일러에서 기능을 활성화야 사용할 수 있습니다. 이 글에서는 Visual Stud.. 2024. 4. 15.