从另一个函数创建一个函数(参数较少)
Creating a function (of fewer parameters) from another function
我想做以下事情。假设我有这个:
void f(const char* c) {
// Do stuff with c
}
void g(const char* c, int x, int y) {
// Do other stuff
}
我想做的是从g中创建一个函数,它使用const char*c。这就是:
int a = 5;
int b = 9;
expression(g, a, b)("Hi!");
优选地,expression(g)
也可以存储在变量中。我也不知道如何声明这个变量。
我尝试过使用boost::bind;但是boost::bind返回一个boost::函数,我想要一个普通的C++函数指针。此外,我还看到了这条线索:将boost::函数降级为普通函数指针前两种解决方案都不起作用。我的函数f被约束为接受一个参数(没有void*user_data指针)。我需要这个的原因是我有第三个函数h,它接受一个参数的函数,即const char*,并用它做事情。我希望能够以g的形式传递给h。
h(f) // Valid
h(expression(g, a, b)) // Would like for this to be valid, too
我不确定这是否可能,但如果可能,一定要告诉:)。
使用bind
:
#include <functional>
auto h = std::bind(g, std::placeholders::_1, 5, 9);
h("hi");
bind
会复制参数,所以如果您计划通过引用获取参数,请小心(在这种情况下,您可能需要std::ref
)。尽量保持结果类型auto
,以避免不必要的转换。
要获得一个正常的C++函数:
void h(char const * s) { g(s, 5, 9); }
或者:
void (*ph)(char const *) = [](const char * s) { g(s, 5, 9); };
或者对于疯子:
struct Foo { static void bar(char const * s) { g(s, 5, 9); } };
void (*qh)(char const *) = &Foo::bar;
用法:
h("hi");
ph("hi");
Foo::bar("hi");
qh("hi");
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用