小编Nig*_*arp的帖子

我可以合法地将成员函数指针转换为函数指针吗?

我继承了一些C ++代码,并且承担了摆脱警告的任务。

在这里,我们有一个成员函数指针被转换为一个函数指针。我知道成员函数指针与函数指针“不同”,因为在内部有一个隐含的“ this”参数。但是,我的前任似乎已经明确地利用了这一事实,即从成员函数指针转换为插入了附加第一个参数的函数指针。

我的问题是:

A)我可以摆脱编译器警告吗?

B)该代码在什么程度上可以保证工作?

为了这个问题,我将其缩减为一个小的main.cpp:

#define GENERIC_FUNC_TYPE   void(*)(void)
#define FUNC_TYPE       int(*)(void *)

class MyClass
{
public:
    MyClass(int a) : memberA(a) {}
    int myMemberFunc()
    {
        return memberA;
    }

private:
    int memberA;
};

int main(int argc, char*argv[])
{
    int (MyClass::* memberFunc) () = &MyClass::myMemberFunc;
    MyClass myObject(1);
    std::cout << (myObject.*memberFunc)() << std::endl;
    // All good so far

    // Now get naughty, store it away in a very basic fn ptr
    void(*myStoredFunction)(void) = (GENERIC_FUNC_TYPE)memberFunc;  // Compiler warning

    // Reinterpret the fn …
Run Code Online (Sandbox Code Playgroud)

c++ member-function-pointers

3
推荐指数
1
解决办法
132
查看次数

标签 统计

c++ ×1

member-function-pointers ×1