오블완
-
람다의 참조 캡처는 종종 불안하다개발/C·C++ 2024. 11. 22. 21:02
앞서, 콜백 함수의 인자는 C++17의 apply와 tuple을 이용해 처리할 수 있지만 예제를 최대한 간소화하기 위해 콜백 함수의 인자는 하나로 설정했다. 같은 이유로 요청을 처리할 함수는 멤버 함수가 아니라 전역 함수를 사용했다. 커맨드 패턴을 활용해 요청을 Job 객체로 만들어 큐에 넣고 공통 api-보통 커맨드 패턴에서는 Execute()를 애용하므로- Excute()를 호출해 Job(이하 일감)을 처리한다.일감을 실행하기 위한 callback 함수를 요청 객체에서 가지고 있다가 Execute()를 할 때 callback() 함수를 호출하는 구조를 단순홰해서 볼 건데 callback은 람다로 구현할 것이다. 이 때 람다 본문에서 필요한 변수들은 참조 객체를 해도 될까? 값 복사는 비용이 들고 참조..
-
[Protobuf 따라하기] 수신 데이터를 복사 없이 가공하기개발/C·C++ 2024. 11. 8. 17:28
고정 패킷 이후에 등장하는 가변 데이터는 많고 이를 vector로 관리하게 되면 어쩔 수 없이 복사 비용이 발생한다. 개발이 비교적 편한 건 장점이지만 성능 면에서는 단점이다. 이 단점을 개선하기 위해 포인터를 활용하면 유지보수성이나 가독성이 조금 떨어질 수 있지만 성능에서는 이점이 있으므로 트레이드-오프를 잘 생각해자. 고정 패킷을 읽는 건 쉽다. 그냥 형 변환을 하면 된다.// 패킷#pragma pack(push, 1)struct PacketTest{ struct BuffListItem { uint64 buff_id; float remain_time; }; uint16 packet_size; // 공용 헤더 uint16 packet_id; // 공용 헤더 uint64 id; uint32 hp; u..