调用由模板函数内的迭代器“指向”的函子
下面的模板函数为存储在向量中的二元函数对象序列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)