2013-12-16 81 views

回答

2

號雖然std::bind1st()創建了一個電話運營商了結和int一個函數對象,它是不是一個void(*)(int)。只有這樣,才能把一個void(*)(void*, int)void(*)(int)是有其獲得來自全球的資源void*轉發功能,例如,

static void* data = 0; // probably needs to be set to a more suitable value 
void f_forward(int value) { 
    f(data, value); 
} 

任何人提供回調不採取用戶定義的情境,例如,在剛剛通過的類似C的界面void*中,並沒有考慮太接口的問題。

+0

確實。我希望避免一個全局/靜態變量。感謝你的回答。 –

+0

@violetgiraffe另一種方法是編寫自我修改的代碼,它既不可移植也不比C++更低。基本上從操作系統獲得一個可寫頁面,用一個常量嵌入機器代碼中的已知函數,修改該常量,將頁面標記爲只讀和可執行文件,然後使用'硬編碼'無效*'。是的,這在許多平臺上都是可行的,這僅僅是非常明智的。使用全局的,如果你需要多個,使用一組'N'和一個全局數組,並聲明你使用不超過'N'。 – Yakk

相關問題