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

nac*_*o4d 3 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];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Sir*_*ius 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

根据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)();
    }
}
Run Code Online (Sandbox Code Playgroud)