将函数指针映射到 std::string

Map function pointer to std::string

是否可以在符合标准的 C++ 中将函数指针映射到 std::string

将函数指针转换为对象指针甚至进行指针算术都是函数指针的限制,但在这个相关问题中

How to format a function pointer?

给出以下代码:

int (*funcptr)() = main;
unsigned char *p = (unsigned char *)&funcptr;
int i;

for (i = 0; i < sizeof funcptr; i++)
{
    printf("%02x ", p[i]);
}
putchar('\n');

该代码经受住了同行的审查。我有点困惑。使用数组语法访问函数指针是合法的,但指针运算不合法?

这是我目前拥有的。我的编译器没有抱怨,样本量为 1 时,一切看起来都很好。

template<class F>
std::string fptr_to_str(F fptr)
{
    auto fptr_bytes = (const char*)fptr;
    return {fptr_bytes, sizeof(fptr_bytes)};
}

仅当您的平台实际上具有不同指针大小的单独代码和数据段时(几乎没有人再这样做),才将函数指针转换为对象指针。因此,尽管从技术上讲它很糟糕,但实际上没人在乎,Linux 和 Windows 等常见平台上的核心 OS API 依赖于它。

只需转换为 void*,然后像任何其他指针一样格式化它。

备用代码获取函数指针的地址,并在那里提取字节。

您的代码获取函数的地址,并在那里提取字节。

这些是不同的操作。