这个 typedef 定义是什么意思

What does this typedef definition mean?

本文关键字:意思 是什么 定义 typedef 这个      更新时间:2023-10-16

我看到了以下内容(C++):

typedef n *(m)(const n*, const n*);

它是什么意思以及如何使用它?

我明白这一点:

typedef n (*myFunctP)(const n*, const n*);

但是与上面的 typedef 有什么区别?

(希望这不是重复的,没有找到类似的东西...

我要求乔迪为我赢得一些代表:

<tomalak> << TYPE_DESC<m>; struct n {}; typedef n *(m)(const n*, const n*);
<geordi> function taking 2 pointers to constant ns and returning a pointer to a n

C 类型声明语法很糟糕,当您开始执行这样的复杂声明时,它确实变得特别明显。请注意返回类型和参数是如何围绕m而不是n编写的,这完全是直觉的倒退,因为它是你正在创建的m

第二个示例是:

<tomalak> << TYPE_DESC<m>; struct n {}; typedef n (*m)(const n*, const n*);
<geordi> pointer to a function taking 2 pointers to constant ns and returning a n

通过移动*,您不再将其应用于函数类型的返回类型,而是应用于函数类型本身。

在C++11中,除非你迫切需要你的通话超高效,否则请坚持以下内容,为了克苏鲁的爱! :-)

typedef std::function<n*(const n*, const n*)> m;

如果您希望坚持使用函数指针,则可以:

using m = n*(const n*, const n*);

在此之前,您可以使用boost::function或学习可怕的 C 声明符规则。的确,您应该了解它们;只是希望您不必经常使用它们。

第一个 typedef 为函数创建一个别名,该函数接受 2 个参数并返回指向 n 的指针。

第二个 typedef 为指向函数的指针创建一个别名,该函数接受 2 个参数并按值返回n

在第一种情况下,typedef 为函数类型定义了一个别名,该函数类型具有两个数据类型为 const n * 和返回类型n *

在第二种情况下,不是函数类型,而是具有返回类型 n 的函数指针的声明。

在第一种情况下,您也可以例如

typedef n * ( (m)(const n*, const n*) );

它等效于你的类型定义。

至于用法,您可以将其用作函数声明。例如

m MyFunc;

另一个例子

struct A
{
   typedef int n;
   typedef n  ( Operation )( n, n ) const;
   Operation Add;
   Operation Subtract;
   Operation Division;
   Operation Multiply;
};
// and below the function definitions