如何用C语言实现晚期binding?
答案 0 :(得分:8)
后期绑定实际上并不是C语言本身的功能,更多是您的执行环境为您提供的功能。
许多系统将提供延迟绑定作为链接器/加载器的一个特性,您还可以使用显式调用,如dlopen
(打开共享库)和dlsym
(以获取地址)该库中的符号,以便您可以访问或调用它。)
使用{C}标准进行后期绑定的唯一半便携式方法是使用system()
的一些技巧,甚至至少部分是特定于实现的。
如果你不是在谈论延迟绑定而是多态,那么你可以用函数指针来实现这种效果。基本上,您创建一个struct
,其中包含类型的所有数据以及用于查找该类型方法的函数指针。然后,在“构造函数”(通常是 init()函数)中,将函数指针设置为该类型的相关函数。
即使您不使用它,您仍然需要包含所有代码,但 可能会以这种方式获得多态性。
答案 1 :(得分:3)
C中的符号绑定始终在编译时完成,从不运行。
图书馆绑定或调用的动态链接是通过* nix上的dlopen()
和dlsym()
以及Windows上的LoadLibrary()
和GetProcAddress()
完成的。
答案 2 :(得分:1)
答案 3 :(得分:1)
使用Objective-C或Lua。两者都是后期语言,可以很容易地与C语言接口。
当然你可以实现自己的名称解析方案,但为什么要重新发明轮子?
答案 4 :(得分:1)
不幸的是你没有指定操作系统。对于Unix,您可以使用共享库,或创建可配置(插件)模块结构。有关详细信息,您可能会发现apache 1.3 webserver的源代码很有用。 http://httpd.apache.org/download.cgi
答案 5 :(得分:0)
cppdev似乎是唯一一个用他/她的评论来点击现场的人。 请看the definition itself。用几句话说:
后期绑定或动态绑定是一种计算机编程机制 其中通过名称查找对象调用的方法 在运行时。
所有其他答案都错过了主要观点,即“按名称查找”。
所需的解决方案非常类似于指向函数指针的查找表以及一个或两个函数,以便按名称(甚至通过签名)选择正确的函数。我们称之为“哈希表”。