这种typedef定义是什么意思?

时间:2014-01-06 18:21:48

标签: c++ typedef

我见过以下(C ++):

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

这意味着什么以及如何使用?

我理解这一点:

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

但上面的typedef有什么区别?

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

3 个答案:

答案 0 :(得分:12)

我问geordi赢了一些代表:

<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中,除非您迫切需要高效率的呼叫,否则请坚持以下内容,以获得对Cthulhu的热爱! : - )

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

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

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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

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

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

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

它等同于你的typedef。

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

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