我该如何调用此功能?

时间:2013-01-17 19:04:27

标签: c++ typedef

我正在阅读很多关于“typedef函数”的内容,但是当我尝试调用此函数时,我收到了错误。调用此函数的正确语法是什么?

typedef ::com::Type* Func(const char* c, int i);

3 个答案:

答案 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
  • 参数为(int,int)

使用情况F f = &add;

  • F是我们的类型。
  • f是变量名。
  • add是具有正确签名的函数。

您的案例中的有效语法为:typedef ::com::Type (*Func)(const char* c, int i);