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

C++: How do you convert the name of a function pointer to text?

本文关键字:转换 文本 指针 函数 C++      更新时间:2023-10-16

可能的重复项:
如何在 C 中从函数的指针中获取函数的名称?

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

有没有办法做一些类似的事情:
std::cout << function_pointer.function_name_to_text() << "n";

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

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

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

#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;
}

编辑:更新以编译

C++语言中无法执行此操作,因为它不支持反射。__FUNCTION__宏是获取当前(即编译器现在正在编译的内容)函数名称的非标准方法。它内置在许多平台上,但不是全部。你也许可以使用它来接近你想要的东西。