2009-07-04 5 views
2

私はは、(スマートな)ポインタをデフレクションし、それをアップキャストし、そのメソッドを呼び出すファンクタはありますか?

for_each(v.begin(), v.end(), mem_fun_deref(B::blah())); 

(実際に私が持っている:

vector<unique_ptr<A>> 

をしかし、それは問題ではありません)やりたい

class A: public B { ...} 

vector<A*> v; 

持って、私はアップキャストする必要が

をし、メンバー関数を呼び出します。

+0

私はブーストを使用しても構いませんが、実際はもっと複雑です - アップキャストしてメンバー機能を呼び出す必要があります –

答えて

4

boost::lambdaは、それが

vector<A*> v; ... 
using boost::lambda::_1; 
using boost::lambda::bind; 
for_each(v.begin(), v.end(), bind(&B::blah, *_1)); 

不要アップキャストするために行うことはできません。ベースクラスメンバへのメンバポインタは、派生クラスにも適用できます。

#include <boost/lambda/lambda.hpp> 
#include <boost/lambda/bind.hpp> 
+0

ありがとう! 。 –

関連する問題