2013-02-05 30 views
1

可能重複:
Macro/keyword which can be used to print out method name?在運行時C++中有沒有一種有效的方法來檢索函數的全部簽名?

是否有C++的有效途徑,在運行時檢索功能的完整簽名

我需要這個用於記錄目的。我知道宏像__FUNCTION__,但沒有達到目的,因爲它只是返回函數名稱。可能有許多相同功能的重載版本,我想記錄完整的功能簽名。我正在尋找一個解決方案,即使功能簽名被修改,也能正常工作。該解決方案應該始終記錄當前函數簽名

void log(const char* const message)  
    { 
     cout << message << endl; 
    } 

    void ABC(const int& number) 
    { 
     Log(???); // what should I pass to this function so full signature of the ABC function is logged?? 
    } 
+1

是否要打印參數名稱(例如「數字」)或參數值(例如「42」)? – selbie

+0

參數值不是簽名的一部分... –

+0

是的,我想要完整的簽名。通過上面的例子,輸出應該是「void ABC(const int&number)」 –

回答

1

一般沒有,但如果使用GCC,你可以使用__PRETTY_FUNCTION__僞宏....

void ABC(const int& number) { 
    Log(__PRETTY_FUNCTION__); 
    /// etc... 
} 

鐺/ LLVM編譯器還有它。

+0

我使用visual工作室編譯。 __PRETTY_FUNCTION__不起作用... –

+1

可能是一個很好的理由來嘗試GCC .... –

相關問題