如何写日志的函数和类名我在
How to write to log the function and class name i am in ?
我有一个简单的状态机,有一个叫做IState
的类,它有一个函数:
IState doSomething(int i);
我有很多继承者,Astate
, BState
…
我想登录我目前处于哪个状态,我想也许我可以在我所有的doSomething实现中写入以下行:
writeToLog("current function is" << __function__);
,但不幸的是它没有帮助,因为所有的函数命名相同,有一种方法来写完整的函数名称与它的类名?
谢谢
如果您的writeToLog
函数只是期望一个C字符串,那么您可以这样做:
writeToLog("current function is" __FUNCTION__);
请注意,"current function is"
和__FUNCTION__
- C之间没有逗号(或任何其他操作符),相关语言会自动连接字符串字面值。
请注意使用__FUNCTION__
而不是__function__
对于c++可以使用的类名:在c++中有__CLASS__宏吗?
对于函数名,您总是可以使用__FUNCTION__
宏。
如果我没记错的话,对于MSVC, __FUNCTION__
宏也扩展到包含类名。
和强制链接:
https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html http://msdn.microsoft.com/en-us/library/b0084kay.aspx__func__
的标准要求为:
函数局部预定义变量func被定义为类似于
形式的定义
static const char __func__[] = "function-name ";
已经提供了,其中function-name是实现定义的字符串。目前尚不清楚是否这样的变量具有不同于程序中任何其他对象的地址。
您可能使用的任何其他宏都是非标准的-您必须查看您的编译器文档或共享您正在使用的宏
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 我应该在 main 函数中写什么来测试我的问题?
- C++不重载时间函数,所以我们不需要写 NULL 有什么原因吗?
- 我应该如何为包含动态数组的类编写所需的构造函数
- 我写了一个类,它总是将其函数参数委托给它的成员,我该如何改进代码
- c++ 函数的可选写出参数
- "virtual"对C++析构函数有何影响?
- C++ 友元函数在内存位置上有何不同?
- 如何为包含map<int,*double>成员的类编写析构函数?
- 为我的类编写自定义 qhash() 函数
- 如何创建一个函数以读/写数据给结构成员
- 函数是否可以用较小的输入数组编写输入数组
- 如何为包装容器的模板类编写构造函数,其中容器可以是数组或向量
- 尝试创建重载 + 运算符时在 main 函数中写什么
- 如何用c++文件函数读写8位整数单位形式的数据
- 我需要在这个类的析构函数中写什么吗?