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

时间:2015-03-12 23:15:01

标签: c++ string function-pointers

是否可以在标准符合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)};
}

2 个答案:

答案 0 :(得分:5)

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

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

这些是不同的操作。

答案 1 :(得分:0)

如果你的平台实际上有不同的代码和具有不同指针大小的数据段(几乎没有人会这样做),那么向对象指针转换函数指针只是顽皮。因此,虽然技术上很糟糕,但事实上,没有人关心,Linux和Windows等常见平台上的核心OS API依赖于它。

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