본문 바로가기
반응형

💻 programming/c++26

[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.
[c++] perfect forwarding (완벽한 전달) Perfect forwarding Perfect Forwarding Definition 완벽한 전달 (Perfect forwarding)은 lvalue 또는 rvalue의 특성을 바꾸지 않고 함수 템플릿에 인자로 전달하는 것을 의미합니다. Lvalues and rvalues 여기서는 굳이 glvalues, xvalues, prvlaue와 같은 자세한 내용에 대해서는 다루지 않습니다. 우리는 rvlaue와 lvalue에 대해서만 이해하고 있으면 됩니다. Rvalue에 해당하는 변수는 다음과 같습니다. 임시 객체 이름 없는 객체 주소가 없는 객체 만약 이중에서 하나라도 해당한다면 해당 변수는 rvalue 입니다. 반대로 lvalue는 이름과 주소를 가지고 있습니다. 아래 코드는 rvalue에 해당하는 예시입.. 2020. 12. 15.
[c++] async en.cppreference.com/w/cpp/thread/async std::async - cppreference.com (1) (since C++11) (until C++17) template std::future , std::decay_t ...>> async( Function&& f, Args&&... args ); (since C++17) (until C++20) template< class Function, c en.cppreference.com async는 일종의 함수 템플릿 (function template)입니다. async를 사용하면 함수 f를 비동기적으로 실행하고 함수 f의 반환 값을 std::future로 반환합니다. 2020.. 2020. 12. 15.
[c++] packaged task 클래스 템플릿인 std::packaged_task은 호출가능한 callable (함수, 람다 표현식, functor) 등을 템플릿의 인자로 받아 future를 반환할 수 있는 통일된 방법을 제공합니다. 이 방법을 통해 비동기적 수행을 할 수도 있습니다. 예제 코드 task_thread를 제외하고 다른 함수는 비동기적으로 수행되지 않는 것을 알 수 있습니다. thread에 std::packaged_task를 전달하기 위해서는 명시적으로 move 해야합니다. #include #include #include #include #include // unique function to avoid disambiguating the std::pow overload set int f(int x, int y) { retur.. 2020. 12. 15.
[c++] future https://en.cppreference.com/w/cpp/thread/future std::future - cppreference.com template class future; (1) (since C++11) template class future ; (2) (since C++11) template class future ; (3) (since C++11) The class template std::future provides a mechanism to access the result of asynchronous oper en.cppreference.com 클래스 템플릿 (class template)인 std::future는 비동기적 수행 (asynchrono.. 2020. 12. 15.
반응형