C ++:如何将函数指针的名称转换为文本?

时间:2011-05-10 18:23:21

标签: c++

  

可能重复:
  How to get function's name from function's pointer in C?

我正在每次运行时将程序的配置打印到命令行,我想要打印的一件事是当前正在使用的哈希函数 - 它存储在函数指针变量中。

有没有办法按照以下方式做某事:
std::cout << function_pointer.function_name_to_text() << "\n";

所以,如果我有一个名为sha1(char * pre_image)的函数,它只会将sha1输出到控制台? 整个方法标题也很棒。

2 个答案:

答案 0 :(得分:3)

由于编译后函数名称不存在,因此无法在运行时获取函数名称。

但是,您可以构建一个单独的查找函数来保存名称并将其与函数指针相关联:

#include <iostream>
#include <map>
#include <string>
#include <boost/preprocessor/stringize.hpp>

typedef void (*fptr_t)(char*);
typedef std::map<fptr_t, std::string> function_map_t;
function_map_t fmap;

#define REGISTER_FUNCTION(f) fmap[f] = BOOST_PP_STRINGIZE(f);

void sha1(char*) {}  // a function you want to lookup

int main() {
      REGISTER_FUNCTION(sha1)
      fptr_t my_pointer = sha1;
      std::cout << "Function name is: " << fmap[my_pointer] << std::endl;
      return 0;
}

编辑:已更新以编译

答案 1 :(得分:2)

在C ++语言中无法做到这一点,因为它不支持反射。 __FUNCTION__宏是获取当前(意味着编译器正在编译的内容)函数名称的非标准方法。它内置于许多平台上,但不是全部。你也许可以用它来接近你想要的东西。