如何调用此函数

How do I call this function?

本文关键字:函数 调用 何调用      更新时间:2023-10-16

我读了很多关于"typedef函数"的文章,但当我试图调用这个函数时,我会遇到转换错误。调用此函数的正确语法是什么?

typedef ::com::Type* Func(const char* c, int i);
该语句使Func成为一种类型。然后你必须说Func *f = anotherFunc,给定另一个函数定义为:::com::Type* anotherFunc(const char *c, int i){ /*body*/ }

然后您可以调用f("hello", 0),它应该可以工作。

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

等等。

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

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);