C++中的一系列函数指针

Ves*_*del 3 c++ arrays function

我正在试图弄清楚如何创建一个指向类内部函数的指针数组.数组中的元素表示唯一函数的位置.

Tiles.h代码:

class tiles: public box
{
    public:
        void north2east(float trans_x, float trans_y);
        void north2west(float trans_x, float trans_y);
        void south2east(float trans_x, float trans_y);
        void south2west(float trans_x, float trans_y);
};
Run Code Online (Sandbox Code Playgroud)

Tiles.cpp代码:

void tiles::north2east(float trans_x, float trans_y); { }
void tiles::north2west(float trans_x, float trans_y); { }
void tiles::south2east(float trans_x, float trans_y); { }
void tiles::south2west(float trans_x, float trans_y); { }
Run Code Online (Sandbox Code Playgroud)

我听说你可以通过在Tiles.cpp文件中添加以下内容来实现:

typedef void (*FUNC_ARRAY) (float trans_x, float trans_y);
FUNC_ARRAY functions[] = {
    tiles::north2east,
    tiles::north2west,
    tiles::south2east,
    tiles::south2west
}
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误:

类型为"void(tiles ::*)(float trans_x,float trans_y)"的值不能用于初始化"FUNC_ARRAY"类型的实体

欢迎提出解决代码的提示和建议!

Sho*_*hoe 5

只需将您更改typedef为:

typedef void (tiles::*FUNC_ARRAY) (float trans_x, float trans_y);
//            ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

您当前的typedef只能用于常规函数和静态成员函数.你需要的是一个指向成员函数的指针.

  • @VesmirPendel记住,现在你只能在对象上调用这些方法,例如:`tiles t; (t.*function [1])(1.0,1.0);`或`tiles*t = new t; (t - >*function [1])(1.0,1.0);` (3认同)