繁体   English   中英

如何传递缺少参数的函数?

How to pass a function with missing arguments?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个以double (*function)(double t, double y)为参数的过程。 现在我有一个像double fce (double t, double y, int a)这样的函数,我想用一个填充的参数将它传递给我的程序,类似于fce (, , 5) ,使其成为double fce (double t, double y)但我找不到用C或C ++做的方法。

3 个回复

或许,编写一个可变参数函数 ,可以让你能够传递不同数量的值。

(因为你问过C或C ++),你可以用std :: bind来做。

查看此答案以获取更多详细信息

using namespace std::placeholders;  // for _1, _2, _3...
// Fix first argument as 10
auto fce_third_arg_is_5 = bind(fce, 5, _3);
/* foo(function); */
foo(fce_third_arg_is_5);

,您可以通过编写新的转换器函数来完成此操作

/* Can be used only in global scope */
#define GEN_FUNC(X) double templated_fn_##X(double t, double y) {return fce(t, y, X);}

GEN_FUNC(5);
...
/* foo(function); */
foo(templated_fn_5);

或通用解决方案:

static int a_val_g;

static double wrapper(double t, double y)
{
  return fce(t, y, a_val_g);
}

function make_func(int a) {
  /* Warning: Not thread safe. Subsequent call will invalidate previously returned function */
  /* fn(make_func(i), make_func(42); is bad */
  /* Using make_func in a multithreaded application is unsafe unless synchronized properly */
  a_val_g = a;
  return wrapper;
}
...
/* foo(function); */
foo(make_func(5));

在这方面,C和C ++是非常不同的语言。

你可能想要一个闭包 (或者在C或旧的C ++ 98中使用if-你没有它们,有一个回调机制所以传递一个函数指针和一些额外的数据)

在C ++中,您需要使用C ++ 11标准(例如,使用g++ -std=c++11 )至少,它提供匿名lambda函数 - 有闭包 - 和std::function模板

BTW,闭包(和匿名函数)非常方便, 函数式编程语言需要一个垃圾收集器来方便地处理它们。 这样的东西容易编码,例如Ocaml,Clojure,Common Lisp,Haskell等....

1 如何自动将参数传递给函数?

我想通过这个函数传递txt1和txt2以验证两个用户输入框但是我一次只能传递一个参数,这意味着不得不生成2个函数? 是否有一种方法可以在输入txt1的所有位置中txt1之后自动传递txt2。 ...

2015-02-02 13:08:35 1 55   vb.net
2 如何将参数传递给函数指针

我正在使用c中的函数指针,因为我的自定义API库需要回调机制。 总结一个简单的例子: SY_msg的大小为1024个字节。 因此,堆栈中有1024个字节。 指向userfuncion()的指针作为calback_wrapper []中的第一个元素。 但我想拥有以下内容: ...

3 React 如何将参数传递给函数

嗨,我发现了一个问同样问题的问题,但他们使用“类名扩展”编码完全不同,我只是使用“函数名称”。 我想知道我将如何解决这个问题,或者我是否必须重写我的程序。 我在底部留下了样式。 窗口.js 项目.js ...

2019-12-12 22:57:30 2 59   reactjs
4 如何将函数指针作为参数传递?

我有两个函数定义 现在我为send_packet(char,unsigned char *,unsigned char)创建了一个函数指针为 我想像这样传递这个函数指针 但是我收到一个错误“ send_packet *类型的参数与volatile char *类型不兼容” ...

6 如何将参数传递给函数? [关闭]

我有一个问题,如何使用较少的局部变量和符号(例如“ *”,“&”)使代码更易读 当我写这样的东西: 我不能做这样的事情 我得到一个错误 与指针相同 所以我需要这样的东西 您知道如何在不创建新变量和不使用引用的情况下使其变得更简单吗? ...

8 如何将可选参数传递给函数

我正在尝试使模块的函数接受以下形式的可选参数: 但是我找不到任何能很好解释如何执行此操作的地方。 我想出了以下解决方案来接受email , alpha和html参数,但是它非常复杂,我无法相信没有比这更短的方法了: 编辑: 由于下面的答案和下面的评论,这解决了它: ...

9 如何在颤振中将参数传递给函数?

我有以下功能: 上面的函数需要 2 个参数。 我通过以下方式调用上述函数: 在<----------1--------->我需要传递两个参数。 我不知道该怎么做,请帮助我。 函数 getExpenseDateWise 用于获取用户以不同形式选择的两个日期之间的数据记录。 这就 ...

2021-04-30 12:39:02 2 63   flutter
10 如何将参数传递给funscript函数?

是否可以将F#本地生成的数据传递给正在Funscript中编译的表达式? 我的意思示例: 如果我使用静态字符串而不是从本地文件读取它,那么它可以工作,因此我的猜测是Funscript尝试将文件读取编译为JS,即使该文件在到达编译时已被读取? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM