linux中的__func__ vs VS中的__FUNCTION__

时间:2014-01-13 09:57:47

标签: c++ linux visual-studio-2008 gcc

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的方法是什么?

1 个答案:

答案 0 :(得分:0)

没有宏,你正在寻找。但您可以轻松地从__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

获得相同的结果