2014-01-13 60 views
0
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; 
} 

上面的代碼片斷輸出A::Print在Windows和Linux中Print。 在Linux中獲得classname::functionname的方式是什麼?__func__在linux VS __FUNCTION__在VS

+0

GCC有'__FUNCTION__'宏。此外,您可以使用'__PRETTY_FUNCTION__',它與'__FUNCTION__'不同,因爲'__PRETTY_FUNCTION__'也包含參數子句。 – ForEveR

+0

看起來像gcc中的__FUNCTION__也只給出了函數名,__PRETTY_FUNCTION__返回了整個函數簽名:(我的要求是不同的 – KodeWarrior

回答

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 

要得到相同的結果