我应该如何在 C++ 中定义指向函数的指针数组?
How Should I Define an Array of Pointers to Functions in C++?
我正在尝试创建一个函数数组,以便我可以使用索引调用数组中的函数。我似乎无法弄清楚括号、星号和括号来创建这个函数数组。这是我拥有的:
void Game::getPawnMoves(int position, bool color, Move ** moveList) {
...
}
typedef void (*GetMoveFunction) (int, bool, Move **);
void Game::getLegalMoves(Move ** moveList) {
GetMoveFunction functions[] =
{
getPawnMoves,
getKnightMoves,
getBishopMoves,
getRookMoves,
getQueenMoves,
getKingMoves
};
...
}
所有 getPawnMoves、getKnightMoves 和其余的都具有相同的参数,并且所有 return 无效。 Move 只是一个包含两个字符和一个枚举的结构。在这种情况下,如果您想尝试编译它,可以将 Move ** 替换为 int **。
我在编译时遇到的错误是:
Game.cpp:443:5: error: cannot convert ‘Game::getPawnMoves’ from type
‘void (Game::)(int, bool, Move**) {aka void (Game::)(int, bool, Move_t**)}’ to
type ‘GetMoveFunction {aka void (*)(int, bool, Move_t**)}’
所以出于某种原因,编译器认为 GetMoveFunction 是 void * 而不是 void,但是如果我将 typedef 更改为
typedef void (GetMoveFunction) (int, bool, Move **);
我收到错误:
Game.cpp:435:28: error: declaration of ‘functions’ as array of functions
GetMoveFunction functions[] =
老实说,我非常喜欢这个。非常感谢您的帮助!
How Should I Define an Array of Pointers to Functions in C++?
typedef void (*GetMoveFunction) (int, bool, Move **);
这是一个指向函数的指针。
GetMoveFunction functions[] =
{
// ...
};
这是一个函数指针数组。您已经实现了问题标题中的要求。
Game.cpp:443:5: error: cannot convert ‘Game::getPawnMoves’ from type
‘void (Game::)(int, bool, Move**) {aka void (Game::)(int, bool, Move_t**)}’ to
type ‘GetMoveFunction {aka void (*)(int, bool, Move_t**)}’
这里的问题是您正在尝试使用 non-static 成员函数来初始化函数指针。函数指针不能指向 non-static 个成员函数。
您可能需要的是指向 Game
的 成员 函数的指针数组。另一种选择是类型擦除函数包装器数组 (std::function
)。
我正在尝试创建一个函数数组,以便我可以使用索引调用数组中的函数。我似乎无法弄清楚括号、星号和括号来创建这个函数数组。这是我拥有的:
void Game::getPawnMoves(int position, bool color, Move ** moveList) {
...
}
typedef void (*GetMoveFunction) (int, bool, Move **);
void Game::getLegalMoves(Move ** moveList) {
GetMoveFunction functions[] =
{
getPawnMoves,
getKnightMoves,
getBishopMoves,
getRookMoves,
getQueenMoves,
getKingMoves
};
...
}
所有 getPawnMoves、getKnightMoves 和其余的都具有相同的参数,并且所有 return 无效。 Move 只是一个包含两个字符和一个枚举的结构。在这种情况下,如果您想尝试编译它,可以将 Move ** 替换为 int **。
我在编译时遇到的错误是:
Game.cpp:443:5: error: cannot convert ‘Game::getPawnMoves’ from type
‘void (Game::)(int, bool, Move**) {aka void (Game::)(int, bool, Move_t**)}’ to
type ‘GetMoveFunction {aka void (*)(int, bool, Move_t**)}’
所以出于某种原因,编译器认为 GetMoveFunction 是 void * 而不是 void,但是如果我将 typedef 更改为
typedef void (GetMoveFunction) (int, bool, Move **);
我收到错误:
Game.cpp:435:28: error: declaration of ‘functions’ as array of functions
GetMoveFunction functions[] =
老实说,我非常喜欢这个。非常感谢您的帮助!
How Should I Define an Array of Pointers to Functions in C++?
typedef void (*GetMoveFunction) (int, bool, Move **);
这是一个指向函数的指针。
GetMoveFunction functions[] = { // ... };
这是一个函数指针数组。您已经实现了问题标题中的要求。
Game.cpp:443:5: error: cannot convert ‘Game::getPawnMoves’ from type ‘void (Game::)(int, bool, Move**) {aka void (Game::)(int, bool, Move_t**)}’ to type ‘GetMoveFunction {aka void (*)(int, bool, Move_t**)}’
这里的问题是您正在尝试使用 non-static 成员函数来初始化函数指针。函数指针不能指向 non-static 个成员函数。
您可能需要的是指向 Game
的 成员 函数的指针数组。另一种选择是类型擦除函数包装器数组 (std::function
)。