C++:在不知道函数名的情况下获取当前函数指针?

Posted

技术标签:

【中文标题】C++:在不知道函数名的情况下获取当前函数指针?【英文标题】:C++: get current function pointer without knowing function name? 【发布时间】: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;

【问题讨论】:

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

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

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

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

【讨论】:

以上是关于C++:在不知道函数名的情况下获取当前函数指针?的主要内容,如果未能解决你的问题,请参考以下文章

如何在构造函数中访问类变量以在不使用 C++ 中的 this 指针的情况下分配它们

我应该如何在不使用 C++ 中的构造函数的情况下将值(不是指针)转换为子类?

C++ 成员函数指针和 STL 算法

如何在不进行硬编码的情况下在 C++ 中获取类数组的长度?

如何在不使用 CURDATE、MONTH、YEAR 等 DATE 函数的情况下从 RDBMS 获取当前月份记录

函数在不删除动态数组的情况下工作。程序有效且没有错误