在运行时有没有一种有效的方法在C ++中检索函数的*完整签名*?

时间:2013-02-05 06:15:06

标签: c++ visual-c++

  

可能重复:
  Macro / keyword which can be used to print out method name?

在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??
    }

2 个答案:

答案 0 :(得分:3)

Predefined Macros (C/C++) page on MSDN包含所有可用宏的列表。您正在寻找的那个可能是__FUNCSIG__

答案 1 :(得分:1)

一般情况下没有,但如果使用GCC,你可以使用__PRETTY_FUNCTION__伪宏....

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

Clang / LLVM编译器也有它。