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++中有没有这样的功能?
在这方面,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)