调用cpp中的方法,比如Objective-C中的@selector(someMethod :)

时间:2010-07-21 08:24:00

标签: c++ iphone objective-c

在Objective-C中,您可以将方法A作为其他方法B的参数传递。 并从方法B内部调用方法A. 非常容易这样:

-(void) setTarget:(id)object action:(SEL)selectorA
{
    if[object respondsToSelector:selectorA]{
       [object performSelector:selectorA withObject:nil afterDelay:0.0];
    }
}

C ++中有没有这样的功能?

2 个答案:

答案 0 :(得分:6)

C ++和Objective-C在这方面有很大的不同。

Objective-C使用消息传递来实现对象方法调用,这意味着在运行时解析方法,允许反射和委派。

C ++使用静态类型和V表来实现类中的函数调用,这意味着函数表示为指针。无法动态确定类是否实现给定方法,因为内存中没有方法名称。

另一方面,您可以使用RTTI来确定给定对象是否属于某种类型。

void callFunc(generic_object * obj) {
    specific_object * spec_obj = dynamic_cast<specific_object*>(obj);
    if (spec_obj != NULL) {
        spec_obj->method();
    }
}

编辑:

根据nacho4d的要求,这是一个动态调用的例子:

typedef void (specific_object::*ptr_to_func)();

void callFunc(generic_object * obj, ptr_to_func f) {
    specific_object * spec_obj = dynamic_cast<specific_object*>(obj);
    if (spec_obj != NULL) {
        ((*spec_obj).*f)();
    }
}

答案 1 :(得分:2)

是的,它们被称为“功能指针”,你将获得大量的搜索结果,

http://www.newty.de/fpt/index.html

http://www.cprogramming.com/tutorial/function-pointers.html