class gfx {
void resize(int x, int y);
}
gfx g;
我可以以某种方式将 g.resize 转换为 'void (*)(int, int)' 吗?
class gfx {
void resize(int x, int y);
}
gfx g;
我可以以某种方式将 g.resize 转换为 'void (*)(int, int)' 吗?
号gfx::resize
是类型void(gfx::*)(int, int)
。您无法将其有意义地转换为 typevoid(*)(int, int)
因为您只能将其作为 type 对象的成员函数调用gfx
。
成员函数只能在类的实例上调用,所以给定你的gfx g;
,你可以调用g.resize()
,但你不能resize()
像普通函数一样调用。普通函数指针不能指向成员函数,因为它无法将函数调用绑定到类的实例。
从概念上讲,成员函数接受一个附加参数,即this
参数,该参数指向调用它的类的实例。
如果您希望能够通过普通函数指针调用成员函数,您可以创建一个带有参数的非成员函数(或静态成员函数)包装器,您可以将调用该成员的对象实例传递给该包装器功能。例如,您可以:
void resize(gfx* obj, int x, int y) {
return obj->resize(x, y);
}
这个非成员resize
函数有类型void(*)(gfx*, int, int)
,可以作为非成员函数调用。这种方法的通用形式是 C++0x 中的std::function
和std::bind
工具(您也可以在Boost和 C++ TR1 中找到它们)。
是的,你可以这样做:
void easy_resize(int x, int y) { g.resize(x, y); }