我见过以下(C++):
typedef n *(m)(const n*, const n*);
Run Code Online (Sandbox Code Playgroud)
它是什么意思,怎么用?
我理解这个:
typedef n (*myFunctP)(const n*, const n*);
Run Code Online (Sandbox Code Playgroud)
但上面的typedef有什么区别?
(希望这没有重复,没有找到类似的东西...)
Lig*_*ica 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
通过移动*,您不再将其应用于函数类型的返回类型,而是应用于函数类型本身.
在C++ 11中,除非您迫切需要高效率的呼叫,否则请坚持以下内容,以满足对Cthulhu的热爱!:-)
typedef std::function<n*(const n*, const n*)> m;
Run Code Online (Sandbox Code Playgroud)
如果你想坚持使用函数指针,那么你可以:
using m = n*(const n*, const n*);
Run Code Online (Sandbox Code Playgroud)
在此之前,您可以使用boost::function或学习可怕的C声明器规则.你确实应该了解它们; 它只是希望你不会有过于频繁地使用它们.