【问题标题】:Obj-c About Pointers To FunctionsObj-c 关于指向函数的指针
【发布时间】:2012-06-17 15:42:08
【问题描述】:

我知道块可以传递给实例方法,方法可以写成如下,

-(void)Method:((void) (^)(float)f)
{
    f(0.5);
}

另外,这个方法也是一个有效的表达式。

-(void)Method:((void) (*)(float)f)
{
    f(0.5);
}

我想知道我可以将什么传递给这个方法?还有这个有什么用?

此外,我想知道是否有任何 obj-c 等效于以下 c# 代码?因为我想知道 obj-c 有没有函数指针。

public static float Sum(float x, float y)
{
    return x+y;
}
public delegate float Operation(float x, float y);
public static Main()
{
    Operation dSum = Sum;
    Console.WriteLine(dSum(0.5, 1.5));
}

【问题讨论】:

    标签: c# objective-c function pointers


    【解决方案1】:

    您的第二个 Objective-C 方法采用 C 函数指针,其寻址函数具有 float 作为输入并且不返回任何内容。与块相同:

    typedef void (^ BlockType)(float);
    - (void)blockMethod: (BlockType)block {
        block(1.0);
    }
    [obj blockMethod:aBlock];
    

    对比

    typedef void (* FuncType)(float);
    - (void)funcMethod: (FuncType)func {
        func(1.0);
    }
    [obj funcMethod:aFunc];
    

    区别在于函数不能捕获其周围的状态(函数是函数,块是块。)

    【讨论】:

    • 我是 Obj-C 的新手。我想知道如何将函数传递给实例方法?你能给我一个例子吗?我输入了一个函数的名称,编译器告诉我我没有声明它。还有,周边状态是什么意思?
    【解决方案2】:

    这不需要 Objective-C;您正在尝试做的事情可以很容易地翻译成直接 C:

    static float sum(float x, float y)
    {
        return x + y;
    }
    
    typedef float (*Operation)(float x, float y);
    
    int main(int argc, char **argv)
    {
        Operation dSum = sum;
        printf("%f\n", dSum(0.5, 1.5));
        return 0;
    }
    

    这一切看起来都应该很容易辨认。

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多