GCC提供__PRETTY_FUNCTION__
(6.48 Function Names as Strings),这是一个带有函数名称的字符串。
例如以下程序:
#include <iostream>
#include <string>
namespace n1
{
namespace n2
{
template<typename T>
class t1
{
public:
template<typename R>
R f(T const&) const noexcept
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
return {};
}
};
}
}
int main()
{
n1::n2::t1<std::string>{}.f<double>(std::string{});
}
使用
构建时g++ -Wall -Wextra -Wpedantic -std=c++14
在g++ (GCC) 7.2.0
(MinGW)上,产生以下输出:
R n1::n2::t1<T>::f(const T&) const [with R = double; T = std::__cxx11::basic_string<char>]
现在,问题是 - 我在哪里可以找到与此字符串对应的语法。显然它是基于C ++的,因为有来自C ++的组件(例如标识符),但是整个字符串肯定不是有效的C ++,所以它在C ++规范中找不到。
是否在任何地方指定了?
我猜它不是(毕竟上面提到的链接并没有说出来......)。但是,也许至少它可以从消息来源中读取 - 我会在哪里找到它们?