c++ - 尝试将 remove_reference 作为函数参数传递
问题描述
所以,我正在做我的功课,作为代码的一部分,我需要创建一个带有 3 个参数的函数,前两个是形成某个元素块的指针或迭代器,第三个参数是一个函数参数,并且该参数与两个指针或迭代器之间的块元素的类型相同。
如果我只使用它就可以了
decltype<*p1+*p1>
其中 p1 是指向元素块的指针,但如果元素是复数,它将不起作用。
我尝试了以下方法,但它不起作用
template <typename Type>
bool Fun(Type p1,Type p2,bool(*f)(std::remove_reference<decltype(p1)>::type))
并说以下内容:错误:预期的','或'...'在'('令牌之前
解决方案
以通用方式作用于迭代器的函数也应该以函数参数为模板:
template<class Iter, class Func>
bool do_stuff(Iter begin, Iter end, Func&& func) {
// ...
}
这有以下好处:
- 该函数现在接受 lambda 和其他重载函数运算符的对象
- 编译器可以内联函数调用,因为它知道在编译时调用了什么函数
- 如果
func
通过引用、const 引用或使用它来构造实际参数来获取参数,代码仍然可以编译。
推荐阅读
- android - Android,gradle更新后不能再导入外部依赖
- javascript - 设置和元素的不透明度,然后对其进行动画处理 - 全部使用 JS
- javascript - 无法从 php DB 获取数据到 javascript
- ms-word - 试图将一个 Word 文档的内容拖放到另一个
- ios - 在单击不同的 TableView 单元之前,TableView 单元不会加载视图控制器
- java - 嵌套方法调用
- python - 绘制图形 IP 与出现次数
- php - 带有 Homebrew 的 MacOS Sierra PHP 安装无法使用 homebrew php
- javascript - 如何在 HTML 中传递参数“this”
- angular - 为什么从角度传递反应形式值在服务器端(.net 核心 API)上获取 null?