1

我遇到了两个使用函数指针的不同代码。

请告诉我哪个更好?有什么偏好吗?

typedef int myFunction(int a,int b);
extern myFunction *ptfunction;

typedef int (*ptfunction)(int a,int b);
4

5 回答 5

6

两者都很糟糕,因为它们在语法上是不正确的。

你需要:

typedef int (*myFunction)(int a, int *b);
于 2012-07-04T14:37:36.363 回答
1

都不行,用std::function

std::function<int (int ,int)> ptfunction;
ptfunction = f1;

示例(它在 c++0x 中的 std 中):

如何使用增强绑定

标准::函数

于 2012-07-04T14:46:02.137 回答
1

第二个无效;如果您修复第一行以声明变量而不是类型,则它将等效于第一行:

int (*ptfunction)(int a, int b);

哪个“更好”完全取决于你想用这些东西做什么。如果你需要多次引用同一个类型,那typedef会让事情更清楚;如果您只是想像示例中那样声明一个函数指针,那么它只会增加额外的噪音。

(大概,在你的第一个例子中,第二个参数应该是intnot int*,否则函数调用将无法编译)。

使用函数对象通常更方便和灵活,std::function特别是因为它们可以绑定任意状态。但这超出了这个问题的范围。

于 2012-07-04T15:05:26.753 回答
0

第一个包含另一个错误:您不能将 int 强制转换为指向 int 的指针。哪个更好?他们都完全断章取义。

于 2012-07-04T14:40:25.223 回答
0

对于第一个代码,您必须在某处定义 ptfunction。而且我不认为可以编译第二个代码。

尝试这个:

typedef int *PTFUNCTION(int, int);
PTFUNCTION func = f1;
func(1, 2);
于 2012-07-04T14:40:28.640 回答