C++:如何将函数指针的名称转换为文本
C++: How do you convert the name of a function pointer to text?
可能的重复项:
如何在 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__
宏是获取当前(即编译器现在正在编译的内容)函数名称的非标准方法。它内置在许多平台上,但不是全部。你也许可以使用它来接近你想要的东西。
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何在C++中将十六进制字符串转换为文本数据
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 如何将 qml 的文本转换为 float 和 int
- 将以 null 结尾的字节字符串转换为原始字符串文本
- 编译时间文本到数字转换 (atoi)
- 是否可以创建一个用户定义的文本,将字符串文本转换为 own 类型的数组?
- 如何使用C++将.trc文件类型转换为文本文件?
- 标准是否阻止在可变参数模板中使用足够小的文本值缩小文本转换范围
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 转换非常长的字符串文本C++以满足最大行长策略
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- QT 创建器只会将第一个单词从文本编辑转换为纯文本
- 将文本转换为左值
- 编写一个 C++ 程序以将文本文件转换为 HTML 文件
- 是否有必要在模板化函数中强制转换文本常量?
- FBX SDK - 将 fbx 文件的所有内容转换为文本
- 在c++中转换文本到csv文件
- Qt模型/视图委托:如何简单地转换文本数据