我一直在听C++中的仿函数.有人可以给我一个关于它们是什么的概述以及在什么情况下它们会有用吗?
在C语言中,__FUNCTION__可以用来获取当前函数的名称.但是,如果我定义一个名为a()的函数,并在b()中调用它,如下所示:
b()
{
a();
}
Run Code Online (Sandbox Code Playgroud)
现在,在源代码中,有很多函数,比如b()调用a(),例如c(),d(),e()......
是否有可能在()中添加一些代码来检测调用a()的函数的名称?
进一步:
我想编写一个模板,它将获取实例化函数的返回类型作为参数.
例如,假设我有一个Result模板类:
template<type T>
class Result {
T _result_value;
T& operator=( T that );
~Result( );
}
Run Code Online (Sandbox Code Playgroud)
这个类有几个专业.在析构函数中,我想记录返回类型,并且在operator=分配中我想检查并断言错误值.
理想情况下,我希望能够有这样的定义:
#define RESULT Result< /* decltype magic for type of current function */ >
Run Code Online (Sandbox Code Playgroud)
所以我可以用它:
HFILE MyOpenFile( ... ) {
RESULT result;
}
Run Code Online (Sandbox Code Playgroud)
...将被推断出来Result<HFILE>.这是一个简化的例子:编写RESULT代替Result<HFILE>并不是什么大问题,但是还有其他情况下不容易获得当前函数的返回类型.
有没有办法获得指向当前函数的指针,可能通过gcc扩展或其他一些技巧?
编辑我很好奇是否可以在没有明确使用函数名称的情况下获取函数指针.我以为我有充分的理由想要这个,意识到我不是真的,但我仍然很好奇是否有可能.
是否有可能获得指向当前函数的指针?如果是,我该怎么办?
动机:我有一个功能做一些日志记录,并想打电话
log(currentfunc, "blabla")
Run Code Online (Sandbox Code Playgroud)
例如,哪些输出.