这是我的问题:
我有一个函数指针向量和一个迭代器:
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))
仍然没有运气,有很多模糊的语法错误。
答案 0 :(得分:4)
&myfunc
获取函数的地址。
答案 1 :(得分:1)
你骗了编译器:
f_callbackVector.push_back((void* (*) (void*))handleDeliveryModeChange);
handleDeliveryModeChange
与此签名不符。它的签名实际上是:
void (*)(SESSION, DELIVERY_MODE, DELIVERY_MODE)
您可以通过更改为:Code
来使其正常工作#include <vector>
#include <iostream>
typedef void* SESSION; // Or whatever it is
typedef void* DELIVERY_MODE; // You didn't say what these are
typedef void* (*Func) (SESSION, DELIVERY_MODE, DELIVERY_MODE);
typedef std::vector<Func> FuncVector;
FuncVector f_callbackVector;
FuncVector::iterator f_callbackVectorIterator = f_callbackVector.begin();
// Note: Your pointers return void*, so I changed the return type from void:
void* handleDeliveryModeChange
(
SESSION s,
const DELIVERY_MODE d1,
const DELIVERY_MODE d2
)
{
if ((*f_callbackVectorIterator) == &handleDeliveryModeChange)
{
std::cout << "\n\n\n\nWOW\n\n\n\n";
}
return NULL;
}
int main()
{
f_callbackVector.push_back(handleDeliveryModeChange);
}