如何将函数指针转换为函数名?

Boj*_*eng 1 c++

我现在有一系列具有相同功能的函数,

func_pointer_t func_array[] = {func_1, func_2, func_3, ...};
Run Code Online (Sandbox Code Playgroud)

我想开发一个遍历所有数组成员的程序,并将输出转储到另一个.dat数据文件.输出应具有以下格式:

func_1 func_1_output
func_2 func_2_output
func_3 func_3_output
...
Run Code Online (Sandbox Code Playgroud)

所以我的问题是 - 当遍历数组成员时,我们怎么能让程序知道函数指针指向哪个函数名(例如func_array [0]指向func_1)?

Bod*_*sen 6

没有标准的存档方式存档.所有可能的解决方案都涉及以系统相关的方式将函数地址解析为其名称(甚至不一定总是有效)或更改func_array如下:

struct {
    func_pointer_t func;
    const char * name;
} func_array[] = {
    { func_1, "func_1" },
    { func_2, "func_2" },
    { func_3, "func_3" },
    ...
};
Run Code Online (Sandbox Code Playgroud)

你可以使用宏来缓解工作:

#define FUNC_DEF(func) { func, #func },
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

struct {
    func_pointer_t func;
    const char * name;
} func_array[] = {
    FUNC_DEF(func_1)
    FUNC_DEF(func_2)
    FUNC_DEF(func_3)
    ...
};
Run Code Online (Sandbox Code Playgroud)

所以,如果这是你的选择,你得到了解决方案.如果没有,你将不得不告诉你,你的目标是什么系统.

存在更多的C++ ish解决方案 - 就像Govind Parmar暗示的std :: map解决方案一样,你可以迭代并获取关键的< - >值对.