调用由模板函数内的迭代器“指向”的函子

下面的模板函数为存储在向量中的二元函数对象序列apply_all采用迭代器范围 ( itBegin -> itEnd) 。在我进行迭代时,我希望使用两个给定的参数和来调用每个函子。结果要写入( ),但我不知道如何使用迭代器变量调用函子:abOutput 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);
  • @AbdelAleem `*it` 命名一个函数,但函数调用运算符的优先级高于间接运算符,因此需要括号。如果你有一个类似 `for (auto f : std::ranges::subrange(itBegin, itEnd))` 的 range-for 循环,那么 `f(a, b)` [就足够了](https://coliru. stacked-crooked.com/a/33f5e020fe80f941)

以上是调用由模板函数内的迭代器“指向”的函子的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>