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

是否有類似實現的任何standart或boost仿函數?任何stl/boost仿函數調用operator()

我需要它來遍歷函子的容器:

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

或者,也許還有其他辦法做到這一點?

+0

我不確定你在問什麼。你的代碼現在有什麼問題?它應該做什麼? – 2010-06-16 20:26:37

+0

我有容器的boost :: function對象。我希望用std :: for_each迭代它併爲每個boost :: function元素調用operator(); 我很喜歡像Foo這樣的函數是否已經在stl/boost中實現。編寫它當然沒什麼大不了的。只是認爲它可能已經實施 – Voivoid 2010-06-16 20:30:46

回答

4

粘合劑如增強或的C++ 0x bind()使瑣碎產生這樣的算符:

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

或者用mem_fun_ref

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

可能略少羅嗦與BOOST_FOREACH,特別是如果你有C++ 0x的自動支持:

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

至少我發現了它。 boost :: apply應該完成所有工作

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