gpt4 book ai didi

c++ - 从另一个函数创建一个函数(参数较少)

转载 作者:行者123 更新时间:2023-11-28 03:23:11 25 4
gpt4 key购买 nike

我想做以下事情。假设我有这个:

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::function,我想要一个普通的 C++ 函数指针。另外,我还看到了这个线程: demote boost::function to a plain function pointer前两个解决方案都行不通。我的函数 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++ - 从另一个函数创建一个函数(参数较少),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com