C++ 函数指针语法

C++ 函数指针语法,c++,function-pointers,typedef,C++,Function Pointers,Typedef,我遇到了两个使用函数指针的不同代码 请告诉我哪一个更好?有什么偏好吗 typedef int myFunction(int a,int b); extern myFunction *ptfunction; 及 两者都不好,因为它们在语法上是不正确的 你需要: typedef int (*myFunction)(int a, int *b); 两者都不好,因为它们在语法上是不正确的 你需要: typedef int (*myFunction)(int a, int *b); 第一个包含另一个

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

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

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


两者都不好,因为它们在语法上是不正确的

你需要:

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

两者都不好,因为它们在语法上是不正确的

你需要:

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

第一个包含另一个错误:不能将int转换为指向int的指针。哪一个更好?它们都完全脱离了上下文。

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

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

试试这个:

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

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

试试这个:

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

都不要使用
std::function

std::function<int (int ,int)> ptfunction;
ptfunction = f1;
std::function ptfunction;
ptfunction=f1;
示例(在c++0x的std中):


都不要使用
std::function

std::function<int (int ,int)> ptfunction;
ptfunction = f1;
std::function ptfunction;
ptfunction=f1;
示例(在c++0x的std中):


第二个无效;如果将第一行修改为声明变量,而不是类型,则与第一行相同:

int (*ptfunction)(int a, int b);
哪个“更好”完全取决于你想用这些东西做什么。如果您需要多次引用同一类型,那么
typedef
将使事情更清楚;如果您只想像示例中那样声明单个函数指针,那么它只会增加额外的干扰

(在第一个示例中,第二个参数应该是
int
而不是
int*
,否则函数调用将无法编译)


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

第二个是无效的;如果将第一行修改为声明变量,而不是类型,则与第一行相同:

int (*ptfunction)(int a, int b);
哪个“更好”完全取决于你想用这些东西做什么。如果您需要多次引用同一类型,那么
typedef
将使事情更清楚;如果您只想像示例中那样声明单个函数指针,那么它只会增加额外的干扰

(在第一个示例中,第二个参数应该是
int
而不是
int*
,否则函数调用将无法编译)


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

我同意第一个,因为第二个无法编译。我不太理解这里需要typedef。不会简单地声明int(*ptfunction)(inta,intb);是否达到与typedef相同的效果?我认为简单的声明更清楚。(如果你不需要它,编译器会对它进行优化…)如果你编辑了你的原始帖子并添加了两个工作示例,这将非常有用。我会选择第一个,因为第二个不会编译。我不太理解这里需要typedef。不会简单地声明int(*ptfunction)(inta,intb);是否达到与typedef相同的效果?我认为简单的声明更清楚。(如果你不需要它,编译器将对它进行优化…)如果你编辑了你的原始帖子并添加了两个工作示例,这将非常有用。我喜欢使用
std:::function
,但根本不需要
std::bind
。您只需执行
ptfunction=f1我真的不确定没有绑定就可以做到这一点。如果你想做更复杂的事情而不仅仅是转发,你只需要绑定。我喜欢使用
std:::function
的建议,但根本不需要
std::bind
。您只需执行
ptfunction=f1我真的不确定没有绑定就可以做到这一点。如果你想做更复杂的事情而不仅仅是向前推进,你只需要绑定。第一个很好(至少在语法上)-你可以定义一个函数类型,你只是不能声明该类型的对象。第一个很好(至少在语法上)-你可以定义一个函数类型,你不能声明这种类型的对象。