c++ - 如何创建调用特定函数的函数对象
问题描述
假设我有一个接受任意函数对象作为参数的函数模板:
template<typename F>
// func is a function object
void do_something(F func) {
// Do something with func
}
我还有一个普通的功能:
int f(int x) {
return 2 * x;
}
我想f
作为参数传递给do_something
. 但是,当我这样做时,它会do_something
被实例化,并且对内部的F = int (*)(int)
调用会通过函数指针导致运行时间接。我想要的是专门实例化 call ,而不是任何具有相同签名的函数。我可以使用 lambda 表达式来实现这一点:func
do_something
do_something
f
do_something([](int x) -> int { return f(x); });
在这种情况下,do_something
将被实例化为F
一个新的闭包类型,并且在运行时不会发生指针间接。但是这段代码看起来不太好。有没有更优雅的方法来实现这一点?
解决方案
推荐阅读
- next.js - 组件定义缺少显示名称eslintreact/display-name
- selenium - 使用 Selenium C# DevTools 如何使用 c# 捕获 f12 选项(网络)
- excel - 在 Excel 中计算电力塔的困难
- entity-framework - 在 Razor 页面中添加脚手架项目时出错
- django - 如何在序列化程序中获取所有字段名称
- unity3d - Unity3D - 将第三人称视角限制为仅查看 FPS 视图可以看到的内容
- javascript - 如何在 js discord bot 开发中使用 cookie
- c++ - C++静态对象不保存数组属性值
- pandas - 为什么带有 adlfs 的 dask read_csv() 会遇到内存问题?
- java - 位图无法正确解码代表文件数据的 byteArray