【问题标题】:Function pointer with some parameters set设置了一些参数的函数指针
【发布时间】:2016-09-26 14:39:46
【问题描述】:

如何创建一个指向函数的函数指针,其中一些参数设置为在定义上固定。

这是我的意思的一个例子:

假设我有这个功能

int add (int n, int m) {
     return n+m;
}

和函数指针类型

typedef int (*increaser)(int);

我想要的是一个指向函数 add 的指针,它将第一个参数固定为 1 并使第二个参数保持打开状态。类似于

increaser f = &add(1,x);

我怎样才能做到这一点?

【问题讨论】:

  • 写一个包装器..
  • C 没有闭包。
  • 我不会调用函数类型increaser。对我来说,它更像是一个int_unary_operator,因为实现这个签名的函数可以很好地做一些完全不同的事情。

标签: c pointers function-pointers


【解决方案1】:

我想要的是一个指向函数 add 的指针,它将第一个参数固定为 1 并使第二个参数保持打开状态。

C 中没有这样的东西。最接近的方法是创建一个包装函数并创建一个指向它的指针:

int add1(int x) {
    return add(1, x);
}

increaser f = &add1;

如果你不需要指向函数的指针,那么你可以使用宏:

#define increaser(x) add(1, (x))

【讨论】:

    【解决方案2】:

    C 不支持直接这样做。在 C++ 中有 std::function 和 bind 可以实现这一点。

    对于纯 C 解决方案,您可以合理获得的最接近的方法是定义一个调用 add 的新函数,例如:

    int increment(int input) {
        return add(1, input);
    }
    

    那么你可以这样做:

    increaser f = &increment;
    

    【讨论】:

      猜你喜欢
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多