2010-01-18 67 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。在幾句:

後期綁定,或動態綁定,是一種計算機編程機制 ,其中在一個物體在運行時查找通過名稱 被調用的方法。

所有其他答案只是錯過了主要觀點,即「按名稱查找」。

所需的解決方案將非常類似於函數指針查找表以及一個或兩個函數按名稱(或甚至通過簽名)選擇正確的函數。我們稱之爲「哈希表」。