在 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++ 中有这样的功能吗?
最佳答案
C++ 和 Objective-C 在这方面有很大不同。
Objective-C 使用消息传递来实现对象方法调用,这意味着方法在运行时解析,允许反射和委托(delegate)。
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)();
}
}
关于c++ - 在 cpp 中调用方法,如 @selector(someMethod :) in Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3297421/