2011-12-20 58 views
0

假設我有不同對象的向量,例如D的類型爲vector<Dog>R的類型爲vector<Rock>。是否有可能使用模板,以便我可以自動讓所有成員函數在矢量上可調用?即如果Dog有一個功能Bark(),我想D.bark(),使所有的狗樹皮。使用模板將類功能應用於對象矢量

現在,很明顯,我可以用一個新的函數和一個簡單的循環手工編寫這個行爲,但有 有一個簡單的方法來模板嗎?即讓R.smash()摔破沒有我所有的岩石 曾經明確地編碼該循環。我試圖想象語法會是什麼,它正在讓我大開眼界。

+0

本身所具有的環路進行編碼,就沒有辦法把一個向量中每個對象上的任何動作,而某種循環。 – Chad 2011-12-20 21:05:00

+0

多難過!我希望有某種功能模板的方式,使得後面的功能。作爲參數傳入,然後可以在模板函數的循環中自動調用該參數。 – andyInCambridge 2011-12-20 21:16:02

回答

4
std::for_each(dogs.begin(), dogs.end(), std::bind(&Dog::bark, _1)); 

在C++ 03中,您可以改爲使用boost::bind。你可以嘗試把它包裝在一個單獨的函數模板中,但我有一種感覺,它不會給你買太多東西。在需要這種行爲的地方使用for_each已經足夠清楚了。

+0

謝謝。綁定命令看起來像這裏的關鍵。我會閱讀它。 – andyInCambridge 2011-12-20 21:09:40

+0

這是最好的方法,但它仍然是「編碼循環」。 – Chad 2011-12-21 02:28:25

2

像這樣的工作:

std::for_each(dog_vec.begin(),dog_vec.end(),std::mem_fun_ref(&dog::bark)); 

我想有一個更簡單的方法。

+1

請注意,mem_fun_ref在C++ 11中已棄用。 – 2011-12-20 21:15:05