2009-02-23 66 views

回答

3

我認爲最好的辦法是提供圍繞C++庫的C包裝。當我用C++進行編程時,這在10年或更早的時候非常流行,但我不知道它是否已經完成了。

基本上,對於每class C,對於每一個構造ctor暴露於創建extern "C" CPtr cCtor(....)方法,它返回一個不透明的指針CPtr和爲每個函數func暴露創建extern "C" cFunc(CPtr,....)

另一種方法是創建一個CStruct它具有函數指針類型的成員變量,實現它們以調用類方法並讓客戶端完成所有艱苦的工作。

4

我不這麼認爲。使用名稱修飾,以便每個重載函數具有與鏈接器查看的名稱不同的名稱。

你可以用C重寫它們,並使用extern "C" {}構造,但你會失去所有漂亮的繼承,多態等等。你也可以將C++封裝在C函數中,只公開C函數。

2

我能想到的唯一方法是將函數聲明爲extern「C」。鏈接器需要名稱修改來區分例如通過它們的參數列表來重載函數(如果不是用於名稱修飾,則鏈接器將不可用)。

0

虛擬功能將是我認爲的答案,你有沒有注意到COM,創建一個實例,它給你一個指向該接口的指針表示爲類。我猜這個聲明的方法不是按名字解決的,而是按槽位索引解決的。