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

3
在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;
}

1
我猜你可能需要一些宏来获取函数名,就像这个链接中的 https://dev59.com/pmUp5IYBdhLWcg3wY25V - fas
2
获取函数名称很容易,但我不知道如何将名称转换为变量。例如:"auto fnPtr = &(__FUNCTION__);" 是行不通的... - Tyson
7
你为什么想要获取自己函数的函数指针? - Fantastic Mr Fox
1
@FantasticMrFox 我想要记录当前函数的内存地址(不是函数名,而是在加载内存中的实际位置)。我猜我可以使用GetProcAddress(module,__FUNCTION__)并导出所有函数,以便它们的名称都可以在模块内进行搜索,但那很混乱,而且我不特别想导出所有函数。 - Tyson
1
@Tyson 再看看我写的内容。我发现你的宏不能使用显式函数名。我正在看下一步。你的宏的结果是什么?它产生了你所要求的:一个指向当前函数的指针,可以在不使用显式函数名的情况下引用。在许多函数的顶部定义 fnPtr 的用例是什么?你的用例的用例是什么? - JaMiT
显示剩余4条评论
1个回答

2

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

最好的方法可能是使用元编程:编写一个程序,在源代码中生成行auto fnPtr = &foo;

话虽如此,我认为这个目标并不值得这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接