通过模板函数内的迭代器调用仿函数 "pointed to"

Calling a functor "pointed to" by an iterator inside a template function

下面的模板函数 apply_all 为存储在向量中的 二元函数对象 序列采用迭代器范围 (itBegin -> itEnd)。在我迭代时,我希望使用两个给定参数 ab 调用每个函子。结果要写到Output IteratoroutIt),但我不知道如何使用迭代器变量调用仿函数:

template <typename InIt, typename OutIt, typename A, typename B>
void apply_all(InIt itBegin, InIt itEnd, OutIt outIt, const A& a, const B& b)
{
    for(auto it = itBegin; it != itEnd; it++)
    {
        *outIt = ... // how do I call the functor pointed to by *it?
        outIt++;
    }
}

在 C++17 中,只需使用 std::invoke

*outIt = std::invoke(*it, a, b);

或普通(如果不是指向成员函数的指针)

*outIt = (*it)( a, b);