c++ - 在 cpp 中调用方法,如 @selector(someMethod :) in Objective-C

标签 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++ 中有这样的功能吗?

最佳答案

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/

相关文章:

c++ - 在资源文件 VC++ 中引用 $(SolutionDir)

c++ - 从用户那里获取 "yyyy/mm/dd, hh:mm"形式的日期输入并在 C++ 中验证日期?

iPhone SDK 反转 UIImage 的颜色

ios - Titanium ios 联系电话自定义标签?

ios - 似乎有有效收据的 IAP 破解

objective-c - 整个应用程序中的自定义后退按钮 UINavigationController

objective-c - 为什么在 AppDelegate.h 中为 ViewController 使用 @class 而不是#import?

javascript - 将 JavaScript 转换为 C++

iphone - 单击 DetailDesclosure 按钮时 MKAnnotationView 推送到 View Controller

c++ - 如何迭代 long long 的二进制掩码?