代码之家  ›  专栏  ›  技术社区  ›  Praxeolitic

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

  •  1
  • Praxeolitic  · 技术社区  · 9 年前

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

    将函数指针转换为对象指针,甚至进行指针运算都是不允许使用函数指针的,但在这个相关问题中

    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 回复  |  直到 7 年前
        1
  •  5
  •   Yakk - Adam Nevraumont    9 年前

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

    代码获取函数的地址,并从中提取字节。

    这些是不同的操作。

        2
  •  0
  •   Puppy    9 年前

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

    刚投到 void* 然后像其他指针一样格式化。