在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 ++中有没有这样的功能?
答案 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)
是的,它们被称为“功能指针”,你将获得大量的搜索结果,