通过模板函数内的迭代器调用仿函数 "pointed to"
Calling a functor "pointed to" by an iterator inside a template function
下面的模板函数 apply_all
为存储在向量中的 二元函数对象 序列采用迭代器范围 (itBegin -> itEnd
)。在我迭代时,我希望使用两个给定参数 a
和 b
调用每个函子。结果要写到Output Iterator
(outIt
),但我不知道如何使用迭代器变量调用仿函数:
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);
下面的模板函数 apply_all
为存储在向量中的 二元函数对象 序列采用迭代器范围 (itBegin -> itEnd
)。在我迭代时,我希望使用两个给定参数 a
和 b
调用每个函子。结果要写到Output Iterator
(outIt
),但我不知道如何使用迭代器变量调用仿函数:
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);