2010-06-16 3 views
3
template <typename T> 
struct Foo 
{ 
    void operator()(T& t) { t(); } 
}; 

Y a-t-il un foncteur standart ou boost avec une implémentation similaire?tous les foncteurs stl/boost pour appeler l'opérateur()

J'ai besoin pour itérer sur conteneur de foncteurs:

std::for_each(beginIter, endIter, Foo<Bar>()); 

Ou peut-être il y a d'autres façon de le faire?

+0

Je ne suis pas sûr de ce que vous demandez. Quel est le problème avec votre code tel quel? Qu'est-ce que c'est censé faire? –

+0

J'ai un conteneur d'objets boost :: function. Je souhaite itérer dessus avec std :: for_each et appeler operator() pour chaque élément boost :: function; Je suis intrested si le foncteur comme Foo est déjà implémenté dans stl/boost. Bien sûr, ce n'est pas un gros problème pour l'écrire. Je pensais juste qu'il pourrait déjà être mis en œuvre – Voivoid

Répondre

4

comme liants Renforce ou C++ 0x bind() font trivial pour générer un tel foncteur:

std::for_each(begin, end, boost::bind(&Bar::operator(), _1)); 

Ou en utilisant mem_fun_ref:

std::for_each(v.begin(), v.end(), std::mem_fun_ref(&Bar::operator())); 
1

Il est peut-être un peu moins verbeux avec BOOST_FOREACH, en particulier si vous avez le support automatique de C++ 0x:

BOOST_FOREACH(auto f, v) {f();} 
0

Au moins, je l'ai trouvé. boost :: appliquer devrait faire tout le travail

std::for_each(beginIter, endIter, boost::bind(boost::apply<void>(), _1)); 
Questions connexes