0

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

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

3 回答 3

4

该语句构成Func了一种类型。然后你不得不说Func *f = anotherFunc给定另一个 func 定义为:::com::Type* anotherFunc(const char *c, int i){ /*body*/ }

然后你可以打电话f("hello", 0),它应该工作。

于 2013-01-17T19:07:41.813 回答
2

您的代码中没有任何功能。只有一个类型名称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));

等等。

换句话说,向我们展示你想用它做什么。因为你的问题太宽泛,无法具体回答。

于 2013-01-17T19:15:24.240 回答
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);

于 2013-01-17T19:12:31.120 回答