我正在阅读很多关于“typedef函数”的内容,但是当我尝试调用此函数时,我收到了错误。调用此函数的正确语法是什么?
typedef ::com::Type* Func(const char* c, int i);
答案 0 :(得分:4)
该语句使Func
成为一种类型。然后你必须说Func *f = anotherFunc
给定另一个func定义为:::com::Type* anotherFunc(const char *c, int i){ /*body*/ }
然后你可以致电f("hello", 0)
,它应该有用。
答案 1 :(得分:2)
您的代码中没有任何功能。只有一个类型名称Func
代表功能类型。那里没什么可以叫的。
您问题中定义的名称Func
可以通过多种不同的方式使用。
例如,您可以使用它来声明函数
Func foo;
以上相当于声明
::com::Type* foo(const char*, int);
这也适用于成员函数声明。 (但是,您无法使用它来定义函数)。
另一个例子,你可以在声明指向函数的指针时使用它,方法是添加一个显式的*
Func *ptr = &some_other_function;
以上相当于声明
::com::Type* (*ptr)(const char*, int) = &some_other_function;
对于另一个例子,你可以在另一个函数中使用它作为参数类型
void bar(Func foo)
在这种情况下,函数类型将自动衰减为函数指针类型,这意味着bar
的上述声明等同于
void bar(Func *foo)
,相当于
void bar(::com::Type* (*foo)(const char*, int));
等等。
换句话说,告诉我们您正在尝试用它做什么。因为你的问题太宽泛而无法具体回答。
答案 2 :(得分:1)
typedef
函数语法:
#include <iostream>
using namespace std;
int add(int a, int b) {return a+b;}
typedef int(*F)(int a, int b);
int main() {
F f = add;
cout << f(1,2) << endl;
return 0;
}
typedef int(*F)(int a, int b);
type
名称在括号中为F int
。 使用情况F f = &add;
:
您的案例中的有效语法为:typedef ::com::Type (*Func)(const char* c, int i);