此问题在此处已有答案:
How can I get the class name from a C++ object?(10个答案)
How to print the current filename with a function defined in another file without using macros? [duplicate](1个答案)
What advantages does C++20's std::source_location have over the pre-defined macros FILE, LINE and FUNCTION?(3个答案)
4天前关闭。
嗨,我知道这是一个老主题:如何获得c函数名。但是我真的没有看到一个满意的答案。
我使用的是c17,所以c++20功能不适用于我。
我需要一个可靠的方法,能够打印“class_name::func_name()”的类内函数(静态和示例方法),和“func_name()”的c风格的函数。
该方法必须处理所有类型的情况:
1.样板函式。
1.跳过所有的参数。有时一个参数中会有“()”,例如,一个类型为std::function<void()>的参数,所以很难解析。
1.静态函数和示例函数
1.嵌套类
我尝试了__PRETTY_FUNCTION__
,__FUNCTION__
,__func__
,并尝试用一些代码解析它们。我没有看到一种真正适用于所有情况的方法。
谢谢.
1条答案
按热度按时间4bbkushb1#
你可以使用
std::source_location
来获得一个实现定义的字符串,描述函数名等。范例:
字符串
可能的输出(gcc和llvm在本例中恰好一致):
型
Demo的
在C++17中,如果使用标准库的gcc实现,可以使用
experimental/source_location
:型