函数指针语法

时间:2012-07-04 14:35:36

标签: c++ function-pointers typedef

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

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

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

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

5 个答案:

答案 0 :(得分:6)

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

你需要:

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

答案 1 :(得分:1)

不要使用std::function

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

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

<强> how to use boost bind

<强> std::function

答案 2 :(得分:1)

第二个无效;如果你修改第一行来声明一个变量而不是一个类型,它将等同于第一行:

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

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

(据推测,在你的第一个例子中,第二个参数应该是int而不是int*,否则函数调用将无法编译。)

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

答案 3 :(得分:0)

第一个包含另一个错误:您无法将int转换为指向int的指针。哪一个更好?它们都完全脱离了背景。

答案 4 :(得分:0)

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

试试这个:

typedef int *PTFUNCTION(int, int);
PTFUNCTION func = f1;
func(1, 2);