如何获取当前函数的地址
C++ : how to get address of current function
我的问题是:
我有一个函数指针向量和一个迭代器:
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("nnnnWOWnnnn");
}
}
,得到:
invalid static_cast from type âvoid* (*)(void*)â to type âvoid (*)(void*, DELIVERY_MODE, DELIVERY_MODE)â
如果你能帮我,我会很感激的。
谢谢!
乌利希期刊指南:我试着:
if (*(f_callbackVectorIterator) == &handleDeliveryModeChange)
and got error: 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))
仍然没有运气,有很多模糊的句法错误。
&myfunc
得到函数的地址
你在对编译器撒谎:
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 << "nnnnWOWnnnn";
}
return NULL;
}
int main()
{
f_callbackVector.push_back(handleDeliveryModeChange);
}
相关文章:
- 为什么成员函数地址离自由函数这么远?
- MFC 消息映射中的函数地址
- 设置成员 GlobalCEFApp->OnWebKit使用函数地址初始化 C++生成器
- 在Visual C 中找到调用函数地址(安全)
- 获取函数地址时出现奇怪行为
- 函数地址
- 如何在C++中打印成员函数地址
- 为什么函数指针、函数地址和函数相同
- 匹配布尔值与常量 void* 重载的函数地址
- 函数地址和函数地址的地址没有区别吗?
- 在 Linux 库中查找静态函数地址
- 调用传递给 gcc 内联汇编器 (avr-gcc) 的 const 函数地址
- 使用32位应用程序从64位kernel32.dll获取函数地址
- 为什么函数地址不是常量表达式
- 将函数地址转换为 64 位整数:未定义/行为不当
- Visual Studio在打印函数地址时出错
- 获取有关函数地址的信息
- 通过函数地址调用另一个类的函数
- 打印成员函数地址的最简单方法是什么?
- 圆括号成员函数地址错误