2014-01-30 45 views
1

基本上,我已經編譯了一個寫入程序集的文件; .obj file。它有一個導出功能f。在C++中,我編寫了一個類,並希望使用導出的函數f作爲成員函數。C++鏈接一個extern函數作爲成員函數

如果它被用作一個全局函數,我知道只寫extern "C" f()。但是,這不適用於成員函數,至少我沒有弄清楚如何去做。

那麼,我該怎麼做呢?

注意:函數f寫入正確。即它考慮到了指針等,它應該在彙編級別正確工作。

+0

難道你不能創建一個類的實例嗎?包括定義類的頭文件? –

回答

4

如果函數是作爲一個自由函數編寫的,那麼您將不得不按照您習慣的方式將其聲明爲自由函數。正如你不能建立一個圖書館void foo(),然後以某種方式聲明它爲void bar()並希望它工作,你不能採取免費的功能,並將其變成一個成員函數。你可以做什麼,雖然是加內嵌轉發到您的類像這樣:

struct S; 
extern "C" void f(S *); 

struct S { 
    void f() { 
     using ::f; 
     f(this); 
    } 
}; 

這是你能做的最好的,據我所知。

+0

我寧願調用':: f(this)'。更容易理解和維護。 –

+0

@JohnDibling:在這種情況下,要麼工作正常,但我更喜歡從不調用限定ADL的函數。 –

+0

但是這正是你想要的嗎? –

相關問題