【发布时间】:2016-05-27 07:07:31
【问题描述】:
Objective C 的主要功能之一是简单的introspection。此功能的典型用途是能够在调用某个方法(函数)之前检查它是否确实存在。
而下面的代码将在运行时抛出一个错误(尽管它编译就好了(Apple LLVM version 7.0.2 (clang-700.1.81)))...
@import Foundation;
@interface Maybe : NSObject + (void) maybeNot; @end
@implementation Maybe @end
int main (){ [Maybe maybeNot]; }
通过在调用前添加一个简单的条件...
if ([Maybe respondsToSelector:@selector(maybeNot)])
我们可以等到运行时来决定是否调用该方法。
有没有办法使用“标准”C (c11) 或 C++ (std=c14) 来做到这一点?
即......
extern void callMeIfYouDare();
int main() { /* if (...) */ callMeIfYouDare(); }
我想我还应该提到我正在测试/使用它是在 Darwin 运行时环境中。
【问题讨论】:
-
我想你可以实现自己的动态函数查找/调用代码,比如 Obj-C。
-
在哪个操作系统上?标准 C 没有任何自省
-
如果该函数不存在,您将收到链接器错误。就是这样。您的程序永远不需要在运行时进行任何此类检查。
标签: c++ c function runtime conditional