我使用函数指针遇到了两个不同的代码。
请告诉我哪一个更好?有什么偏好吗?
typedef int myFunction(int a,int b);
extern myFunction *ptfunction;
和
typedef int (*ptfunction)(int a,int b);
答案 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);