【问题标题】:C++: get current function pointer without knowing function name?C++:在不知道函数名的情况下获取当前函数指针?
【发布时间】:2021-08-02 02:28:18
【问题描述】:

在 Windows/MSVS/C++ 中,我可以通过指向函数名称来获取函数指针,如下所示:

void foo()
{
    auto fooPtr = &foo;
}

但是我可以在不知道函数名称的情况下做同样的事情吗?

void foo()
{
    auto fnPtr = &thisFunction; //no
}

用例:我想定义一个宏,我可以把它放在许多函数的顶部,这些函数将声明一个指向函数的指针。例如:

#define defFnPtr auto fnPtr = &thisFunction
void foo()
{
    defFnPtr;
}
void bar()
{
    defFnPtr;
}

【问题讨论】:

  • 我猜你可能需要一些宏来获取函数名,比如stackoverflow.com/questions/15305310/…
  • 获取函数名称很容易,是的,但我没有看到将名称解串为变量的方法。例如:“自动 fnPtr = &(__FUNCTION__);​​”行不通……
  • 出于兴趣,为什么要获取指向自己函数的函数指针?
  • @FantasticMrFox 我想记录当前函数的内存地址(不是它的名称作为字符串......加载内存中的实际位置)。我想我可以使用 GetProcAddress(module, __FUNCTION__) 并导出我的所有函数,以便它们的名称都可以在模块中搜索,但这很麻烦,我不想特别想导出我的所有函数。
  • @Tyson 再看看我写的。我看到您的宏不能使用显式函数名称。我正在考虑下一步。你的宏的结果是什么?它会产生您所要求的:指向当前函数的指针,无需使用显式函数名即可引用。在许多函数的顶部定义fnPtr 的用例是什么? 你的用例的用例是什么?

标签: c++ function pointers


【解决方案1】:

不,在标准 C++ 中没有办法获得指向“当前”函数的指针。

您可以做的最好的事情可能是使用元编程:编写一个程序,将auto fnPtr = &foo; 行生成到源代码中。

也就是说,我认为目标不值得付出努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多