반응형 💻 programming67 [c++] google c++ style guide Google C++ Style Guide 본 장에서는 Google C++ 스타일 가이드에 대해 요약하고 있습니다. Google C++ Style Guide cpplint는 정적 코드 체커 프로그램입니다. cpplint를 이용하면 작성한 소스코드가 Google C++ 스타일 가이드를 잘 따르는지 체크할 수 있습니다. cpplint/cpplint cf. vscode cpplint extension Contents Background C++는 구글 오픈 소스 프로젝트에서 많이 사용되는 주요 프로그래밍 언어들 중 하나입니다. 모든 C++ 프로그래머가 알고 있듯이 C++는 매우 강력한 기능을 제공하고 있습니다. 그러나 강력한 기능을 제공하기 위한 언어의 복잡성 때문에 때로는 버그를 생산하기도 하고, 읽기 어려운 .. 2020. 12. 15. [c++] template meta programming Template Meta Programming 다음 c++ 프로그램의 동작을 예상해봅시다. #include using namespace std; template struct funStruct { enum { val = 2*funStruct ::val }; }; template struct funcStruct { enum {val = 1}; }; int main() [ cout 2020. 12. 15. [c++] variadic template (가변 길이 템플릿) Variadic Template Variadic function templates in C++ - GeeksforGeeks 가변 길이 템플릿 (Variadic template)은 여러개의 인자를 가질 수 있습니다. 예를 들어 가변 길이 템플릿을 이용하여 정의한 함수 템플릿은 정해진 숫자가 아닌 가변 길이 인자를 받을 수 있습니다. Syntax for a variadic function template 아래 코드에서 typename 뒤에 선언된 "..."이 템플릿 파라미터 팩 (parameter pack)입니다. 이 템플릿 파라미터 팩을 선언하면 이 템플릿은 0개 이상의 (가변된 길이의) 인자를 받을 수 있다는 뜻입니다. template (typename arg, typename... args) retur.. 2020. 12. 15. [c++] functor (function object) Functor (Function object) Functors in C++ - GeeksforGeeks 우선 Functor는 Function과 다르다는 것을 먼저 밝힙니다. 그럼 Functor와 Function은 무엇이 다를까요? 한 번 하나의 인자를 받는 함수를 생각해보세요. 만약 런타임 시간 동안 이 함수에 전달하고 싶은 데이터가 있다면 어떻게 전달할 수 있을까요? 간단한 방법은 전역 변수를 사용하는 것입니다. 그렇지만 누구나 알고 있듯 전역 변수를 사용하는 것은 다른 대안이 없을 때 정말 마지막으로 사용하는 것이 좋습니다. 함수 객체 (Functor; Function object)를 이용하면 이 문제를 해결하면서도 마치 함수나 함수 포인터인 것처럼 다룰 수 있습니다. 이러한 함수 객체를 이용한 방법.. 2020. 12. 15. [c++] template specialization Template Specialization Template Specialization in C++ - GeeksforGeeks 템플릿을 이용하면 데이터 타입에 무관한 함수 또는 클래스를 만들 수 있습니다. 그런데 만약 특정 데이터 타입에 대해서만 다른 코드를 작성하고 싶으면 어떡해야 할까요? 예제 코드 함수 템플릿 예제 #include using namespace std; template void fun(T a) { cout 2020. 12. 15. [c++] template Template Templates in C++ - GeeksforGeeks c++에서 템플릿은 매우 간단하면서도 강력한 기능을 제공합니다. 템플릿은 데이터 타입만 다른 똑같은 함수를 여러 번 작성하지 말고, 데이터 타입을 인자로 전달하자는 단순한 아이디어에서 출발했습니다. 예를 들어 서로 다른 데이터 타입 (정수, 실수, 문자 등)을 정렬하는 sort() 함수를 구현해야 한다고 생각해봅시다. 이 때 템플릿을 이용하면 하나의 소스 코드로 각기 다른 데이터 타입에 따른 동작을 정의할 수 있습니다. 템플릿의 동작 템플릿은 마치 매크로처럼 컴파일 시간에 확장 (expansion)됩니다. 매크로와 다른 점은 컴파일러가 템플릿을 확장하기 전에 타입 체크 (type cheking)을 수행한다는 점입니다. 소스 코드는.. 2020. 12. 15. [c++] any any std::any: How, when, and why | C++ Team Blog 임의의 사용자 데이터 저장하기 다른 개발자에게 달력 라이브러리를 배포한다고 생각해봅시다. 하루 일정은 한 주 일정에 포함되고, 다시 한 주 일정은 월 일정에 포함되어야 할 것입니다. 그리고 각 일정마다 일일 계획 또는 한 주 계획을 저장할 수 있도록 크기가 정해지지 않은 데이터 (user data)를 담을 수 있는 데이터 구조를 만들어야 합니다. 아마 C 개발자라면 임의의 데이터를 받기 위해 void 포인터를 이용할 것입니다. struct day { // ... void* user_data; }; struct month { std::vector days; void* user_data; }; some_day.user_d.. 2020. 12. 15. [c++] optional optional c++17부터는 std::optional, std::any, std::variant가 추가되었습니다. 이 장에서는 std::optional은 언제 어떻게 그리고 왜 써야 하는지 설명하고 있습니다. std::optional: How, when, and why | C++ Team Blog 값이 있기도 하고 없기도 해야 할 때 만약 어떤 객체를 반환하는 힘수가 때로는 값을 반환하지 않아야 한다면 이런 함수를 어떻게 구현할 수 있을까요? 전통적인 방법은 값이 비어있다는 플래그를 정의하는 것입니다. void maybe_take_an_int(int value = -1); // an argument of -1 means "no value" int maybe_return_an_int(); // a re.. 2020. 12. 15. [c++] move std::move std::move std::move는 전달하려는 객체가 이동되었다는 것을 가리키기 위해서 사용됩니다. (이동을 시키는 것이 아닙니다). 즉 std::move로 전달된 인자는 이동 생성자처럼 rvalue reference로 처리할 수 있습니다. template typename std::remove_reference::type&& move (T && t) noexcept; Notes std::move를 함수의 인자로 전달하면 오버로딩 된 함수 들 중 우측 값 참조 (rvalue reference)를 인자로 받을 수 있는 함수 (예들 들어, 이동 생성자, 이동 대입 연산자 등)이 호출됩니다. 참고로 우측값 레퍼런스로 받은 인자는 이름이 있는 lvalue이기 때문에, 이동 생성자나 이동 대입 .. 2020. 12. 15. 이전 1 ··· 4 5 6 7 8 다음 반응형