如何在函数指针中包含参数
How to include arguments in a function pointer?
如何在函数指针中包含参数?
此代码创建一个可以添加两个整数的函数指针:
int addInt(int n, int m) {
return n+m;
}
int (*functionPtr)(int,int);
functionPtr = addInt;
(*functionPtr)(3,5); // = 8
例如,我想创建一个函数指针,其中第一个参数始终为 5,以便函数取一个 int 并加 5。另一个第一个参数是 8。
使用addInt
可以这样做吗?像这样:
// make-believe code that of course won't work
int (*functionPtr)(int);
functionPtr = addInt(5);
(*functionPtr)(3); // = 8
(*functionPtr)(9); // = 14
>像这样使用std::bind
:
using namespace std::placeholders;
auto f = std::bind(addInt, 5, _1);
f(1); //returns 6
使用 std::bind 和占位符
#include <iostream>
#include <functional>
using namespace std;
int addInt(int n, int m) {
return n+m;
}
int main() {
int (*functionPtr)(int,int);
functionPtr = addInt;
(*functionPtr)(3,5); // = 8
auto f2 = std::bind( addInt, std::placeholders::_1, 5);
auto f3 = std::bind( addInt, 8, std::placeholders::_1);
std::cout << f2(1) << "n";;
std::cout << f3(1) << "n";;
}
输出:
6 9
你真正想要的是一个闭包(你可能也想要咖喱化,但C++没有;如果你真的想要它,可以考虑切换到Ocaml)。
C+14 和 C++11 有闭包(但不是 C++ 的早期版本)。阅读有关 lambda 函数(或匿名函数)C++标准 <functional>
标头及其 std::function 模板的信息。
这是给定一些整数的函数d
通过d
返回平移,即函数采用整数x
并返回x+d
#include <functional>
std::function<int(int)> translation(int d) {
return [=](int x) { return addInt(x,d) /* or x+d */ ; };
}
请注意,std::function
-s 不仅仅是 C 函数指针。它们还包含闭合值(在我的translation
示例中d
)
自动和 decltype 说明符非常有用。例如:
auto addfive = translation(5);
std::cout << addfive(3) << std::end; // should output 8
相关文章:
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- C ++引用函数参数似乎包含原始对象的副本,而不是充当"real reference"
- 生成包含给定类型的 N 个参数的可变参数列表的最佳方法?
- 为什么我应该在scanf()-家族成员中包含一个长度修饰符作为参数?有什么好处?使用长度修改器进行扫描的作用
- 如何将枚举类作为类模板参数包含在内?
- C/C++ 包含点的宏参数(成员访问运算符)
- 包含可变参数包的第一个可转换类型的别名的结构
- C 函数调用包装器包含类成员功能作为模板参数
- 为什么我们可以创建一个模板类结构,其中包含许多与声明结构时指定的参数不同的参数
- 传递多个参数的功能,该函数将类包含到其他函数
- 可以使用默认参数复制包含 lambda 的 std::函数吗?
- 定义的参数在以下包含的标头 [AVR C++] 中不可见
- C++添加到包含 char[] 作为参数的链表中
- 可以结构包含参数
- 不知道为什么我收到有关 std::size_t 不包含参数包的编译错误
- 检查类中是否有包含参数的函数
- 如何在函数指针中包含参数