我在此之前發佈了幾個關於使用std::function
而不是快速代理的問題,以及如何將std::function
存儲在集合中以顯示可添加和刪除的事件的行爲。在編寫一整套小型的課程時,我還詢問了最佳實踐,並且這個小小的設計決定也已經得到了解決。這是一個偉大的社區!很多功能vs很多Lambdas?
現在,序言一邊,我必須有我的結構,現在是編寫所有處理傳入數據的處理程序的時候了。我有一個std::map
,看起來像這樣:
typedef std::function<void(const CommandData&)> CommandDelegate;
typedef boost::shared_ptr<CommandDelegate> CommandDelegatePtr;
typedef std::map<short, CommandDelegatePtr> CommandMap;
我想約200處理程序添加到這一點。我可以選擇標準成員函數和lambda表達式。
當我想到成員函數時,我首先想到的是200個聲明和200個實現以及一個大屁股源文件。
我並沒有用所有這些處理程序污染我的班級,我認爲「嗯,它們只是句柄,爲什麼不使用lambdas?似乎很簡單,當構建類時它可以將所有這些匿名函數分配給地圖。完成任務!
然後我意識到構造將是巨大的。我可以稱之爲「initializeMap`輔助函數可以想見,走在它自己的文件,因爲大小。
你們覺得呢?
- 200報價
.h
文件,200個實現(除其他功能)在cpp文件 - 200聲明在
.h
文件,單獨的「handlers.cpp`實現文件 - 沒有聲明,分配在構造函數200層的lambda
- 否聲明,在其自己的文件中分配了
initializeMap
函數中的200個lambda表達式。
在此先感謝!
不確定你的意思是'動態'...數據是用代碼進來的,並且必須調用該代碼的適當處理程序,因此具有`std :: function`的地圖。如果這不是動態的意思,你是什麼意思? – 2011-01-08 14:22:29
我只是指lambda函數。對不起,如果我不清楚。 – Cray 2011-01-08 14:26:00