0
我有一個功能void f (void*, int);
,用作回調函數。來電者預計void (*)(int)
。我可以使用std::bind1st
將一個轉換爲另一個嗎?有沒有辦法做到這一點,而不使用C++ 11 std::bind
,只是std::bind1st
?可以用std :: bind1st將void(*)(void *,int)轉換爲void(*)(int)嗎?
我有一個功能void f (void*, int);
,用作回調函數。來電者預計void (*)(int)
。我可以使用std::bind1st
將一個轉換爲另一個嗎?有沒有辦法做到這一點,而不使用C++ 11 std::bind
,只是std::bind1st
?可以用std :: bind1st將void(*)(void *,int)轉換爲void(*)(int)嗎?
號雖然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*
中,並沒有考慮太接口的問題。
確實。我希望避免一個全局/靜態變量。感謝你的回答。 –
@violetgiraffe另一種方法是編寫自我修改的代碼,它既不可移植也不比C++更低。基本上從操作系統獲得一個可寫頁面,用一個常量嵌入機器代碼中的已知函數,修改該常量,將頁面標記爲只讀和可執行文件,然後使用'硬編碼'無效*'。是的,這在許多平臺上都是可行的,這僅僅是非常明智的。使用全局的,如果你需要多個,使用一組'N'和一個全局數組,並聲明你使用不超過'N'。 – Yakk