【问题标题】:C++ function pointers and presetting argumentsC++ 函数指针和预设参数
【发布时间】:2010-08-23 08:55:54
【问题描述】:

假设我有一个函数f(a, b, c)。是否可以创建函数指针 gh,以便当您使用 gh 时,它们对参数之一使用预定值?

例如,(*g)(b, c) 将等效于 f(1, b, c)(*h)(b, c) 将等效于调用 f(2, b, c)

我这样做的原因是我正在调用一个函数,我可以获取一个指针(通过 dlsym),并且该函数的行为完全不同,具体取决于第一个参数是什么(以至于它们不应该t真的被称为相同的东西)。更重要的是,在主程序中使用的函数指针变量通常只能带两个参数,因为这是导入函数有三个的特殊情况(但实际上只需要两个,一个本质上是设置参数)。

谢谢。

【问题讨论】:

  • 你想要的叫做柯里化。看这个问题:stackoverflow.com/questions/152005/…
  • @camh:请注意,这个问题是很久以前提出的。现在指向std::bindboost::bind)的答案将是压倒性的。:)

标签: c++ function-pointers


【解决方案1】:

如果你已经定义了 g 指向的函数,我不明白为什么你可以这样做

void gfunc(int b, int c) { 
  f (1, b, c); 
}
g = &gfunc;

在 C++ 中执行此操作的更好方法可能是使用函子。

【讨论】:

  • 我猜他的意思是使用默认参数。
  • 仿函数+1。然而 Hemal 的解决方案非常简单,VolatileStorm 可以有他想要的 h 和 g。
  • @Stephane:但函数指针的签名不再匹配。
  • 代码小丑我很困惑。如果 g 必须使用比 f 更少的参数来调用,那么它的签名就不能匹配 f 的签名。 g 可以指向多个函数,每个函数都可以使用不同的默认值(使用仿函数的充分理由,因为每个实例都可以使用不同的默认值:))。如果他们的 sig 必须与 f 匹配,那么他们将需要忽略不建议的第一个参数。
  • 虽然这行得通,但它实际上是我已经有的解决方案,而且不是很“好”(我承认我对这些事情有点坚持)。我不确定“签名”是什么意思,但如果我理解所需的通用签名是 g 和 h 的签名,那么 f 就是需要忘记的那个。
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 2016-03-14
  • 2012-03-10
相关资源
最近更新 更多