gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:07:21 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com