首页 > 解决方案 > 尝试将 remove_reference 作为函数参数传递

问题描述

所以,我正在做我的功课,作为代码的一部分,我需要创建一个带有 3 个参数的函数,前两个是形成某个元素块的指针或迭代器,第三个参数是一个函数参数,并且该参数与两个指针或迭代器之间的块元素的类型相同。

如果我只使用它就可以了

decltype<*p1+*p1>

其中 p1 是指向元素块的指针,但如果元素是复数,它将不起作用。

我尝试了以下方法,但它不起作用  

template <typename Type>
bool Fun(Type p1,Type p2,bool(*f)(std::remove_reference<decltype(p1)>::type))

并说以下内容:错误:预期的','或'...'在'('令牌之前

标签: c++

解决方案


以通用方式作用于迭代器的函数也应该以函数参数为模板:

template<class Iter, class Func>
bool do_stuff(Iter begin, Iter end, Func&& func) {
    // ...
}

这有以下好处:

  • 该函数现在接受 lambda 和其他重载函数运算符的对象
  • 编译器可以内联函数调用,因为它知道在编译时调用了什么函数
  • 如果func通过引用、const 引用或使用它来构造实际参数来获取参数,代码仍然可以编译。

推荐阅读