Lamda
-
람다의 참조 캡처는 종종 불안하다개발/C·C++ 2024. 11. 22. 21:02
앞서, 콜백 함수의 인자는 C++17의 apply와 tuple을 이용해 처리할 수 있지만 예제를 최대한 간소화하기 위해 콜백 함수의 인자는 하나로 설정했다. 같은 이유로 요청을 처리할 함수는 멤버 함수가 아니라 전역 함수를 사용했다. 커맨드 패턴을 활용해 요청을 Job 객체로 만들어 큐에 넣고 공통 api-보통 커맨드 패턴에서는 Execute()를 애용하므로- Excute()를 호출해 Job(이하 일감)을 처리한다.일감을 실행하기 위한 callback 함수를 요청 객체에서 가지고 있다가 Execute()를 할 때 callback() 함수를 호출하는 구조를 단순홰해서 볼 건데 callback은 람다로 구현할 것이다. 이 때 람다 본문에서 필요한 변수들은 참조 객체를 해도 될까? 값 복사는 비용이 들고 참조..
-
std::transform()에 대한 간단한 고찰개발/C·C++ 2024. 9. 4. 22:21
C++ 문법에 대해 살펴보다가 재미있는 코드가 있어서 간단하게 고찰해보려고 한다.공식 문서에 구현 예제까지 나와있다.헤더는 templateconstexpr //templateconstexpr // 대략적인 흐름은 원본 데이터에 대한 시작 반복자, 끝 반복자로 범위를 지정해주고결과물을 저장할 자료구조(우리 예제에서는 vector)의 시작 반복자,그리고 데이터를 가공할 방법을 안내하는 콜백 함수를 넣어주는 형태다. 앞서 잠시 언급했듯이 vector를 사용해 볼 건데,transform()에 넣을 함수 포인터는 멤버 함수에 대한 함수 포인터다.멤버 함수 포인터를 만드는 방법은 일반 함수와 조금 다르다.멤버 함수를 호출할 때 보통 "인스턴스." 혹은 "포인터 변수->"의 방식으로멤버 함수를 호출하고 필요한 인수를..