我有一系列std :: function对象(一种非常原始的信号系统形式)。是否有一个标准(在C ++ 0x中)函数或函数将调用给定的std :: function?现在我用
std::for_each(c.begin(), c.end(),
std::mem_fn(&std::function<void ()>::operator()));
恕我直言,这std::mem_fn(&std::function<void ()>::operator())
很难看。我希望能够写
std::for_each(c.begin(), c.end(), funcall);
有这样的funcall
吗?或者我可以实现一个功能
template<typename I>
void callInSequence(I from, I to)
{
for (; from != to; ++from) (*from)();
}
或者我可能必须使用信号/插槽系统,例如Boost :: Signals,但我觉得这是一种矫枉过正(我不需要多线程支持,所有std::function
都是构造的使用std :: bind)。
答案 0 :(得分:5)
我不知道任何应用功能。但是,在C ++ 0x中,您可以使用lambdas并编写以下内容。
std::for_each(c.begin(), c.end(),
[](std::function<void ()> const & fn) { fn(); });
或者,您可以使用新的for循环。
for (auto const & fn: c)
fn();