這裏是我的問題:C++:如何得到當前函數的地址
我有這方面的函數指針向量和迭代器:
std::vector<void* (*) (void*)> f_callbackVector;
std::vector<void* (*) (void*)>::iterator f_callbackVectorIterator = f_callbackVector.begin();
我填充一些功能的載體:
f_callbackVector.push_back((void* (*) (void*))handleDeliveryModeChange);
當我在函數中,我想能夠檢查迭代器是否持有指向此當前函數的指針。我嘗試這樣做:
void handleDeliveryModeChange(SESSION s, const DELIVERY_MODE d1, const DELIVERY_MODE d2) {
if (static_cast<void (*) (void*, DELIVERY_MODE, DELIVERY_MODE)>((*f_callbackVectorIterator)) == &handleDeliveryModeChange) {
LOG_MESSAGE("\n\n\n\nWOW\n\n\n\n");
}
}
,並得到:
invalid static_cast from type âvoid* (*)(void*)â to type âvoid (*)(void*, DELIVERY_MODE, DELIVERY_MODE)â
我將不勝感激一些幫助與此有關。
謝謝!
UPD: 我想:
if (*(f_callbackVectorIterator) == &handleDeliveryModeChange)
,並得到了錯誤:comparison between distinct pointer types âvoid()(void)â and âvoid()(void, DELIVERY_MODE, DELIVERY_MODE)â lacks a cast
我甚至嘗試這個怪物:
if ((*f_callbackVectorIterator) == static_cast<&(void* (*) (void*))>(&handleDeliveryModeChange))
仍然沒有運氣,得到了很多晦澀的構造結錯誤。
我嘗試使用IF((* f_callbackVectorIterator)==&handleDeliveryModeChange),並得到了錯誤:不同的指針之間的比較(*)(*)(void *,DELIVERY_MODE,DELIVERY_MODE)'缺少轉換 – user2199745 2013-03-22 15:10:36
不知道f_callbackVectorIterator之前的星號在我的評論中消失的位置。它在我的代碼中。 – user2199745 2013-03-22 15:11:58
,因爲你的功能簽名不匹配。 – 2013-03-22 15:14:52