Joh*_*ing 2 c++ qt objective-c
我不太明白我的一个朋友说了什么:
在C++中,如果不知道对象的类型,则无法在对象上调用方法.这不是动态的.在Objective C中,您可以通过执行类似[object message]的操作,在Qt中,您可以使用信号和插槽来完成.在C++ 11中,您也可以这样做
我的问题是:这是正确的吗?
如果可以,请用简单的英语解释我,如果我不知道对象的类型,为什么我不能用C++(而不是C++ 11)中的对象调用方法.
是的,它是正确的(主要是.)C++中的对象方法或多或少像普通函数调用一样实现(虚函数调用除外,它类似于函数指针调用.)C++ 11不会使这更容易,尽管你可以获取函数指针并将其存储std::function,然后将其传递给不知道可以使用它的类型.这可能是你的朋友所指的,并且类似于Qt信号/插槽.
为了知道一个函数调用是否是虚拟的或没有,并且在V表,其中以定位一个虚拟函数的位置,类的类型有是已知的.
在Qt中,你只能这样做QObject.您可以使用Q_INVOKE宏来告诉moc该函数应该可以通过metacall系统访问.然后,你可以使用QMetaObject::invokeMethod它来调用它,只知道基类是QObject(注意你仍然需要知道QObject类型.)Qt在内部只是创建可用于通过名称调用方法的元代码(当他们用Q_SLOT或标记Q_INVOKABLE或在slots部分中时.)
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |