我有一个简单的状态机,有一个名为IState
的类,其中包含一个函数:
IState doSomething(int i);
我有很多继承人,Astate
,BState
...
我想登录我目前处于的状态,我想也许我可以在以下行中写下doSomething的所有实现:
writeToLog("current function is" << __function__);
但不幸的是它没有帮助,因为所有命名相同的函数,有没有办法用它的类名写出完整的函数名?
谢谢
答案 0 :(得分:1)
如果您的writeToLog
函数只需要一个C字符串,那么您可以这样做:
writeToLog("current function is" __FUNCTION__);
请注意"current function is"
和__FUNCTION__
之间没有逗号(或任何其他运算符) - C和相关语言会自动连接字符串文字。
还请注意使用__FUNCTION__
而不是__function__
。
答案 1 :(得分:1)
对于g ++来获取类名,您可以使用:Is there a __CLASS__ macro in C++?
对于函数名称,您始终可以使用__FUNCTION__
宏。
如果我没记错MSVC,__FUNCTION__
宏也会扩展为包含类名。
强制性链接:
https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
答案 2 :(得分:0)
__func__
的标准要求是:
函数本地预定义变量 func 被定义为表单的定义
static const char __func__[] = "function-name ";
已提供,其中function-name是实现定义的字符串。没有具体说明 这样的变量的地址与程序中任何其他对象的地址不同。
您可能使用的任何其他宏都是非标准的 - 您必须查看您的编译器文档或分享您正在使用的宏。