2010-05-07 29 views
1

我一直在閱讀過去一週的模板,函數,回調函數,並提到了一些好書和文章。在C++中的模板,函子,回調函數的練習題?

但是我覺得,除非我能得到很好的做法 - 編程模板和使用仿函數,回調沒有辦法,我可以真正瞭解所有的概念或流利使用它們,而編碼。

任何人都可以提出一些文章或書籍或網站,有問題的定義,並以相同的解決方案。我可以只寫代碼的問題,檢查以後,如果我的解決方案是不夠好..

我也知道,我們的一些堆棧溢出成員都在模板和回調函數的專家。如果他們能夠設計一個問題併發佈一個解決方案,那麼很多模板初學者都可以從中受益,這將是非常好的。

回答

0

一個很好的鍛鍊是匿名函子來代替命名的功能。例如,如

bool is_overdrawn(const Account& account) 
{ 
    return !account.is_balanced(); 
} 

代替使用謂詞,可以通過std::not1(std::mem_fun_ref(&Account::is_balanced))合成仿函數。

+2

爲什麼這是「好」? – 2010-05-07 20:07:56

+0

因爲我想不出任何簡單的東西,但仍然不平凡:)當然,這是否使得代碼更多或更少可讀性是一個不同的問題。我個人喜歡它。 – fredoverflow 2010-05-07 20:27:38

+0

@Neil這是一個練習,通過練習,你可以學習將命令式函數轉化爲一種應用形式(當然包括C++語法)。即使你決定不想自己使用那種風格,我也會發現它本身就具有啓發性。你甚至可以根據這種風格偏好,在相反的方向,並將匿名仿函數轉換爲命名函數 - 當然,這隻有在你已經習慣了匿名仿函數時纔可能,因此我個人認爲這個練習是非常有用的:) – fredoverflow 2010-05-07 20:46:23

3

我個人認爲這是學習任何錯誤的方式。準備好解決這些問題的人肯定不會是那種技術專家。最好的學習方法是找到一個對你很重要的現實世界問題,然後使用該技術解決問題,通過閱讀文本和參考書以及在類似網站上發佈相關問題作爲後盾。

+0

+1發現一個問題,使用新的工具來解決這個問題,測試你的解決問題的辦法,如果你有導師,讓他們審查。如果你需要導師,這裏有很多眼睛! – corsiKa 2010-05-07 19:54:50