加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:57:14 所属栏目:百科 来源:网络整理
导读:我有一个以double(* function)(double t,double y)为参数的过程.现在我有一个像double fce(double t,double y,int a)这样的函数,我想用一个填充的参数将它传递给我的程序,类似于fce(,5),使其成为双fce(double t,double y)但我找不到用C或C做的方法. 解决方法
我有一个以double(* function)(double t,double y)为参数的过程.现在我有一个像double fce(double t,double y,int a)这样的函数,我想用一个填充的参数将它传递给我的程序,类似于fce(,5),使其成为双fce(double t,double y)但我找不到用C或C做的方法.

解决方法

在 c++(因为您询问C或C),您可以使用 std::bind执行此操作.

有关详细信息,请查看this answer.

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);

在c中,您可以通过编写新的转换器功能来完成此操作

/* 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,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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读