如何在C++模板函数内调用迭代器指向的仿函数
解决方法
直接将注释行替换为以下代码即可:
*outIt = (*it)(a, b);
你也可以简化循环逻辑,合并赋值和迭代器自增操作,同时把循环里的后置it++换成前置++it减少不必要的临时对象生成,优化后的完整函数实现如下:
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++ = (*it)(a, b); } }
逻辑说明
it是指向二元函数对象的迭代器,解引用*it后就能拿到存储的函数对象实例。函数对象本身重载了operator(),调用规则和普通函数一致,直接在实例后传入两个参数a和b即可完成调用,返回值直接赋值给输出迭代器指向的位置即可。
内容的提问来源于stack exchange,提问作者Abdel Aleem
相关产品推荐
相关产品推荐

