분류 전체보기
-
[Effective Modern C++] Lambda와 std::bindC++/Effective Modern C++ 2022. 10. 3. 15:57
std::bind를 간단하게 설명하면 함수에 매개변수를 지정하여 래핑(Wrapping)하는 기능입니다. 특정 매개변수에 대하여 고정된 값을 설정할 수 있는 부분에서 std::function과는 다른 차별점을 지니고 있습니다. std::bind는 실제로 특정 값을 고정한 함수를 만들 때 유용합니다. 그런데, 람다가 발표되면서 std::bind보다 람다를 쓰는 것이 좋아졌습니다. 이번 글에서는 람다가 std::bind보다 선호되는 이유에 대하여 살펴보도록 하겠습니다. 0. 이번 글의 시나리오 더보기 알람을 설정하는 함수를 만든다고 가정하도록 하겠습니다. // 특정 시간을 지정 using Time = std::chrono::steady_clock::time_point; // 특정 알람음을 지정 enum cla..
-
[Effective Modern C++] Lambda : auto 매개변수C++/Effective Modern C++ 2022. 9. 25. 13:30
C++14의 주요 기능 중 하나는, 람다 매개변수에 auto를 사용할 수 있게 된 것입니다. 이 기능의 구현은 람다의 클로저 클래스의 수정에 있습니다. auto f = [](auto x){ return normalize(x); } 다음과 같은 람다가 있을 때, 이 람다가 만드는 클로저 클래스의 operator()연산자는 다음과 같이 됩니다. class CLASS_GENERATED_BY_COMPILER { public: template auto operator()(T x) const { return normalize(x); } ... }; 이 코드는, 호출하는 함수에 따라 문제가 발생할 여지가 있습니다. 예를 들어 위 예제에서 호출한 normalize함수가 R-value와 L-value를 다른 방식으로 처..
-
[Effective Modern C++] Lambda : Init captureC++/Effective Modern C++ 2022. 9. 20. 09:08
람다를 사용하다 보면 값 캡쳐도 참조 캡쳐도 적절하지 않을 때가 있습니다. std::unique_ptr등의 이동 전용 객체를 사용하거나, 로직을 최적화 하기 위해 이동 연산을 사용하려 할 때가 그렇습니다. 위와 같은 경우는 객체를 클로저 내부로 이동시키는 것이 바람직한데, C++11에서는 그것이 용이하지 않습니다. 하지만 용이하지만 않을 뿐, 이동 연산을 흉내내는 방법이 있으며, C++14에서는 그것을 정식으로 지원합니다. 이번 글에서는 람다에 이동을 지원하는 매커니즘인 초기화 캡쳐 (Init capture)에 대하여 살펴보도록 하겠습니다. 1. Init capture 더보기 다음은 초기화 캡쳐를 사용하는 예제입니다. auto ptr = std::make_unique(); ... auto func = [..
-
[Github] 원격 저장소 연동하기기타 2022. 9. 16. 16:46
Git은 VCS를 제공하면서, 코드 및 작업물을 원격 저장소에 보관하는 역할도 합니다. Git의 초기 설정과 관련된 내용은 Git 홈페이지의 링크로 대체하도록 하겠습니다. Git 최초설정 본문의 내용은 위 링크의 계정 설정이 완료되었음을 가정하고 작성되었습니다. Git bash를 사용해서 Github의 원격 저장소를 이용하는 방법을 살펴보도록 하겠습니다. 1. Git init 더보기 해당 로컬 디렉토리에서 Git bash을 열어줍니다. git init 명령어를 통해 해당 디렉토리를 git 로컬 저장소로 지정합니다. .git 폴더가 생성됨을 확인할 수 있습니다. (숨김 폴더이기 때문에 설정에 따라 보이지 않을 수 있습니다.) 2. 원격 저장소 설정하기 더보기 원격 저장소를 지정하는 과정입니다. git re..
-
[Visual Studio] Code style 변경하기 (BSD, K&R)C++/미분류 2022. 9. 14. 16:54
소스코드를 작성하는 스타일은 크게 BSD, K&R의 두 종류가 있습니다. 이번 글에서는 두 코드 스타일을 살펴보고, Visual Studio의 코드 편집 스타일을 변경하는 방법을 다룹니다. 1. Code style : BSD 더보기 BSD 스타일은 Allman 스타일이라고도 불립니다. 형태는 아래와 같습니다. void function() { someFunction(); } 중괄호에 현재 스코프와 같은 수준의 공백을 사용하되, 개행 문자를 사용합니다. 이후 본문의 내용은 한 수준 아래로 들여쓰기 합니다. 2. Code style : K&R 더보기 K&R 스타일은 다음과 같은 형태를 가지고 있습니다. void function() { someFunction(); } 본문의 내용을 한 수준 아래로 들여쓰는 것은..
-
[Github] Project 사용하기기타 2022. 9. 12. 12:18
Github의 레포지토리는 소스 코드, 혹은 그와 관련된 파일들을 보관할 수 있는 저장소 입니다. 프로젝트는 레포지토리와 독립적으로 진행될 수 있습니다. 한 개의 레포지토리에서 여러 개의 프로젝트를 진행하거나, 한 개의 프로젝트에서 여러 개의 레포지토리를 이용하는 등의 상황이 생길 수 있습니다. Github는 이러한 유동적인 상황을 관리하기 위해 Project툴을 제공합니다. 이번 글에서는 Github에서 제공하는 Project에 대하여 살펴보도록 하겠습니다. 1. Project 더보기 Project는 레포지토리와 독립적입니다. Project를 레포지토리에서 생성할 수는 없고, 만들어진 Project를 가져오는것 만 할 수 있습니다. Project는 Organization 단위에서 종속적입니다. 따라서 ..
-
[Github] Issue 사용하기기타 2022. 9. 9. 14:22
Github는 VCS만 제공하는 저장소가 아닙니다. 개발을 효율적으로 진행하기 위한 여러 도구들을 제공합니다. 그 중 Issue는 프로젝트에 관한 여러 Issue들 (프로젝트 진행중의 버그 뿐만이 아닌, 프로젝트에 관한 질문, 수정사항 등을 포함합니다.)을 관리하기 위한 기능입니다. 이번 글에서는 Github에서 제공하는 issue 기능에 대하여 살펴보도록 하겠습니다. 1. Issue 만들기 더보기 Github의 레포지토리에 들어가면, 상단 탭 중 Issue 탭을 찾을 수 있습니다. Issue 탭의 New Issue 버튼을 통해 Issue를 만들 수 있습니다. 게시판에 글을 작성하듯 제목과 내용을 적을 수 있습니다. 내용은 마크다운 문법과 멘션, 체크박스 등의 기능을 지원합니다. 이슈의 제목, 내용 외에..
-
[Github] Organization 만들기기타 2022. 9. 3. 22:38
VCS를 개인 레포지토리에서 하기 난감한 상황이 있을 수 있습니다. 팀 단위 프로젝트를 진행할 때, 팀 내에 여러 프로젝트를 진행할 때 등의 경우가 그것입니다. Github는 이러한 상황을 위한 추가적인 그룹을 만드는 기능을 제공합니다. 1. Github 로그인, Organization 생성 더보기 Github 로그인 후, 우측 상단의 프로필 아이콘을 클릭합니다. 개인 프로필을 포함한, 참여중인 Organization들이 나타납니다. 빨간 박스로 표시되어 있는 Create Organization 버튼을 클릭합니다. 이후 Organization의 종류를 선택할 수 있습니다. 가격대별로 제공하는 기능에 차이가 있으므로, 필요한 기능이 있는 항목을 선택합니다. 이 글의 예시는 Free Plan을 적용했습니다...