- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 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/
我一直在努力理解一段这样的代码: class A { // some class definition } class B { public: virtual A *s
我知道 C# 中的 string 和 String 没有区别(除了为 System 添加的 using System .字符串)。仍然,和this SO-answer一样,当我调用 String.So
请看下面的程序:- class Main { public static void main(String[] args) { System.out.println(Boolean.TRU
我正在调查 Blazor,我无意中发现了这个表达式: @onclick="(() => SomeMethod(parameter))" 我无法在任何地方找到/谷歌这个(我猜是 lambda)表达式实
以下是合法的(据我所知): class Outer { void someMethod() { // do something } class Inner {
我知道 :: 是范围解析运算符。但是,如果某些内容仅以范围解析运算符开头,这意味着什么。我知道需要在范围解析运算符之前放置一些东西(类名或命名空间)。如果范围解析运算符之前没有任何内容怎么办。例如 :
我有这个代码: // .m - (void)viewDidLoad { NSMutableArray *array = [[NSMutableArray alloc] init]; [
我需要找到 EditorFor 的所有用法撤消我所做的愚蠢的事情。是否可以找到 Method 的所有用法?对于特定的 T ? 即使是 hack-y 解决方案也会受到赞赏。 最佳答案 如果您知道模型的类
在 hibernate 中创建我们使用的标准 Criteria criterea=session.createCritera(SomeClass.class) 它也可能在其他一些示例中可用,但我无法理
我们可以在抽象类的派生类中调用 super.someMethod() 吗? 例如: abstarct class TestBase{ void nonabstractMethod(){ .
我今天遇到了一个奇怪的语法。该代码来自 Gradle 的源文件,您可以在 src/core-impl/org/gradle/api/internal/artifacts/configurations/
这是我的主类(它使用子类:) import SubClass from './SubClass' class MainClass extends classes(SubClass) { const
页面上有一个带有 href="javascript:someMethod()" 的链接。我需要在 javascript 中以编程方式单击此链接。请不使用 eval() 和不使用 JQuery。 最佳答
当您只能使用简写 Id.something 时,写出 document.getElementById 有什么好处吗?我很感兴趣,因为我在我的教程中看到一些在线代码声明变量 x 等于 document.
我前段时间做了一个原型(prototype),使用 VSTO 并将其方法公开给其他项目。 现在,我尝试将我当时的成功使用实现到我目前正在从事的项目中,但它不起作用。 我收到一条异常消息“System.
这个我可以getChildAt(0).alpha = 0; 但这会引发错误getChildAt(0).gotoAndStop(2); 如何使用显示列表数组访问影片剪辑的方法? 最佳答案 getChil
什么是 (window)在 Angular2 中使用时? 我在研究 Stripe 支付库时发现的: (window).Stripe.card.createToken({ number: this.
我正在学习 JavaScript。 我发现了流行的扩展功能: function extend(Child, Parent) { var F = function() { } F.pro
(注意代码是示例) 我有以下语法: SomeMethod(() => x.Something) 表达式中的第一个括号是什么意思? 我也很好奇如何从传入的参数中获取属性名称。这可能吗? 最佳答案 Wha
当尝试使用 cxf-java2ws-plugin 生成 Web 服务工件时,它又使用 JAX-B,我在如下所示的方法中收到以下错误: Map myMethod(...); 更改方法签名是最后的手段
我是一名优秀的程序员,十分优秀!