2010-01-18 48 views

回答

8

延迟绑定实际上并不是C语言本身的功能,更多是执行环境为您提供的功能。

许多系统将提供延期作为连接器/加载器的功能结合,你也可以使用显式调用诸如dlopen(打开共享库)和dlsym(到库中,以便您在得到一个符号的地址可以访问它或称之为)。

用C标准获得后期绑定的唯一半便携方式是使用system()的一些技巧,甚至至少部分是针对特定实现的。

如果你不是在谈论延迟绑定而是多态,你可以用函数指针来实现这种效果。基本上,您创建了一个struct,其中包含一个类型的所有数据以及用于查找该类型方法的函数指针。然后,在“构造函数”(通常是init()函数)中,将函数指针设置为该类型的相关函数。

即使你不使用它,你仍然需要包含所有的代码,但它可能是这种方式可能获得多态性。

1

如何在C语言中实现后期绑定?

最接近的是通过库(DLL)的动态负载例如与dlopen & dlsym在Linux。否则,它不能直接在C中使用。

3

C中的符号绑定总是在编译时完成的,而不是运行时。

图书馆绑定,或称为动态链接,是通过Windows上的dlopen()dlsym()和Windows上的LoadLibrary()和完成的。

1

使用Objective-C或Lua。两者都是后期绑定,可以方便地与C.

当然,你可以实现自己的名称解析方案的界面语言,但为什么要重新发明轮子?

1

不幸的是,你没有指定一个操作系统。对于Unix,您可以使用共享库,或创建一个可配置(插件)模块结构。有关详细信息,您可能会发现apache 1.3 webserver的源代码很有用。 http://httpd.apache.org/download.cgi

0

cppdev似乎是唯一击中与他/她的话的地方。 请看看the definition itself。在几句:

后期绑定,或动态绑定,是一种计算机编程机制 ,其中在一个物体在运行时查找通过名称 被调用的方法。

所有其他答案只是错过了主要观点,即“按名称查找”。

所需的解决方案将非常类似于函数指针查找表以及一个或两个函数按名称(或甚至通过签名)选择正确的函数。我们称之为“哈希表”。