빠른 대리인을 통해 std::function
을 사용하는 것과 관련하여 몇 가지 질문을 게시했습니다. 컬렉션에 std::function
을 추가하고 제거 할 수있는 이벤트의 동작을 나타낼 수있는 방법을 제시했습니다. 또한 작은 EventArg
-type 클래스의 전체 톤을 작성할 때 모범 사례에 대해 물어 보았습니다. 그리고 그 작은 디자인 결정도 역시 쉬었습니다. 이것은 훌륭한 커뮤니티입니다!많은 함수 대 많은 Lambdas?
이제 프리앰블을 제외하고는 제 구조가 갖추어져 있어야하며 들어오는 데이터를 처리 할 모든 핸들러를 작성할시기입니다.
typedef std::function<void(const CommandData&)> CommandDelegate;
typedef boost::shared_ptr<CommandDelegate> CommandDelegatePtr;
typedef std::map<short, CommandDelegatePtr> CommandMap;
을 그리고 나는이 약 200 처리기를 추가 할 : 나는 std::map
을 가지고, 그것은 다음과 같습니다. 표준 멤버 함수와 람다 중 하나를 선택할 수 있습니다.
멤버 함수를 생각할 때 가장 먼저 생각한 것은 200 개의 선언과 200 개의 구현과 하나의 커다란 소스 파일이었습니다.
이 모든 핸들러로 클래스를 오염시키지 않고 "글쎄, 그들은 단지 핸들이고, 람다를 사용하지 않는 이유는 무엇입니까?"라고 말하면서 클래스가 생성 될 때지도에 이러한 모든 익명 함수를 할당 할 수있을만큼 간단합니다. 작업 완료!
은 그럼 생성자가 큰 것을 깨달았다. 내가 생각할 수 인해 크기로 자신의 파일에 갈 수있는 'initializeMap` 도우미 함수를 호출 할 수 있습니다.
너희들은 어떻게 생각하세요?
- 의 200 개의 선언파일 .cpp 파일에 (다른 기능 사이) 200 실시
.h
파일 - 200 선언
- 없음 선언 200 람다는 ctor에 할당되지 별도 'handlers.cpp` 구현 파일
- 아니오 선언, 자신의 파일에
initializeMap
함수에 할당 된 200 개의 람다.
미리 감사드립니다.
나는 람다쪽으로 기울고있다. 내 메인 클래스에는 작은 핸들러가 없다는 생각이 듭니다. 그래서 질문을, 그들 할당 - 그래서 클래스 생성자/initializer 함수에 대한 질문 같아요. –
3 또는 4, 내 개인적인 취향은 소스 파일보다 적지 만 현대 컴파일러가 동시에 컴파일 할 수 있기 때문에 실제로는 문제가되지 않습니다. – Puppy
나는 꽤 동의하지만 확실하게하고 싶었다. 귀하의 회신에 감사드립니다. –