gpt4 book ai didi

c++ - 获取实例类成员函数的函数指针?

转载 作者:太空狗 更新时间:2023-10-29 20:31:19 40 4
gpt4 key购买 nike

class gfx { 
void resize(int x, int y);
}

gfx g;

我能以某种方式将 g.resize 转换为“void (*)(int, int)”吗?

最佳答案

没有。 gfx::resizevoid(gfx::*)(int, int) 类型。您不能将它有意义地转换为 void(*)(int, int) 类型,因为您只能将其作为 gfx 类型对象的成员函数调用。

成员函数只能在类的实例上调用,因此给定您的 gfx g;,您可以调用 g.resize(),但您可以就像调用普通函数一样调用 resize()。普通函数指针不能指向成员函数,因为它没有任何方法将函数调用绑定(bind)到类的实例。

从概念上讲,成员函数采用一个附加参数,this 参数,它指向调用它的类的实例。

如果你想通过一个普通的函数指针调用一个成员函数,你可以创建一个带有参数的非成员函数(或静态成员函数)包装器,你可以将对象的实例传递给它调用成员函数。例如,您可以:

void resize(gfx* obj, int x, int y) {
return obj->resize(x, y);
}

此非成员 resize 函数的类型为 void(*)(gfx*, int, int) 并且可以作为非成员函数调用。这种方法的一般形式是 C++0x 中的 std::functionstd::bind 工具(您也可以在 Boost 和C++ TR1).

关于c++ - 获取实例类成员函数的函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4542726/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com