我正在阅读很多关于“typedef 函数”的内容,但是当我尝试调用这个函数时遇到了转换错误。调用此函数的正确语法是什么?
typedef ::com::Type* Func(const char* c, int i);
该语句构成Func
了一种类型。然后你不得不说Func *f = anotherFunc
给定另一个 func 定义为:::com::Type* anotherFunc(const char *c, int i){ /*body*/ }
然后你可以打电话f("hello", 0)
,它应该工作。
您的代码中没有任何功能。只有一个类型名称Func
代表函数类型。那里没有什么可以打电话的。
您的问题中定义的 nameFunc
可以以多种不同方式使用。
例如,您可以使用它来声明一个函数
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));
等等。
换句话说,向我们展示你想用它做什么。因为你的问题太宽泛,无法具体回答。
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
名字是Fint
开头的。用法F f = &add;
:
在您的情况下,一个有效的语法是:typedef ::com::Type (*Func)(const char* c, int i);