class A
{
public:
void Print()
{
#if defined( win32 )
std::cout << __FUNCTION__ << std::endl;
#else
std::cout << __func__ << std::endl;
#endif
}
};
int main()
{
A ob;
ob.Print();
return 0;
}
上面的代码片段在 Windows 中打印 A::Print
,在 Linux 中打印 Print
。
Linux 中获取 classname::functionname
的方法是什么?
最佳答案
没有您正在寻找的宏。但您可以轻松地从 __PRETTY_FUNCTION__
做到这一点像:
inline std::string
method_name (const std::string &fsig)
{
size_t colons = fsig.find ("::");
size_t sbeg = fsig.substr (0, colons).rfind (" ") + 1;
size_t send = fsig.rfind ("(") - sbeg;
return fsig.substr (sbeg, send) + "()";
}
#define __METHOD_NAME__ method_name (__PRETTY_FUNCTION__)
然后使用类似:
#if defined (win32)
std::cout << __FUNCTION__ << std::endl;
#else
std::cout << __METHOD_NAME__ << std::endl;
#endif
获得相同的结果
关于c++ - Linux 中的 __func__ 与 VS 中的 __FUNCTION__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21088310/