2011-12-20 4 views
0

Dがタイプで、Rvector<Rock>であるとすると、異なるオブジェクトのベクトルがあるとしましょう。テンプレートを使用することができるので、自動的にすべてのメンバー関数をベクトル上で呼び出し可能にすることができますか?私。 Dogの機能がBark()の場合、私はD.bark()ですべての犬を樹皮にしたいと考えています。テンプレートを使用してオブジェクトのベクトルにクラス関数を適用する

新しい機能と簡単なループを使ってこの動作を手作業でコーディングすることはできましたが、それをテンプレートにする簡単な方法は です。私。そのため、私は というループを明示的にコーディングしていないので、R.smash()はすべての岩を破壊します。私は文法がどんなものか想像してみたいと思っています。それは私の心を吹き飛ばしています。

+0

ループ自体をコード化する必要があります。ループ内に何も配置されていないベクター内の各オブジェクトに対してアクションを実行する方法はありません。 – Chad

+0

どのように悲しい!私は機能的なテンプレートのいくつかの方法があって、その機能が、引数として渡されました。この引数は、テンプレート関数のループで自動的に呼び出されます。 – andyInCambridge

答えて

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

代わりにboost::bindを使用できます。あなたは別の関数テンプレートでそれをラップしようとすることができますが、私はあなたにそれほど多くを買わないと感じています。この動作が必要な場所であるfor_eachを使用すると十分です。このような

+0

ありがとうございます。 bindコマンドは、ここでキーのように見えます。私はそれを読むでしょう。 – andyInCambridge

+0

これは最善のアプローチですが、それでも "ループをコーディングしています"。 – Chad

2

何かが働くだろう:

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

は、私はもっと簡単な方法があると思います。

+1

'mem_fun_ref'はC++ 11では非推奨です。 –

関連する問題