我在OpenCV论坛上发布了这个问题,但是由于它似乎不如SO活跃,所以我仍在尝试看看是否有人可以在没有OpenCV源代码太多背景的情况下帮助我理解这一行代码。
基本上,我无法从OpenCV源代码中理解以下代码行:
typedef Ptr<Layer>(*Constructor)(LayerParams ¶ms);
尤其是,我看不到typedef
在这里的工作方式。这似乎与我在网上看到的典型typedef unsigned long ulong;
示例非常不同。此处将哪种类型定义为哪种?
如果有帮助,Ptr
是具有共享所有权的智能指针的模板类。
Constructor
似乎在此确切代码中定义。
LayerParams
是OpenCV中定义的数据结构。
谢谢!
答案 0 :(得分:4)
要弄清楚chmod
定义的含义,请查看如果typedef
关键字不存在时将声明什么变量:
typedef
这类似于函数声明,除了我们用Ptr<Layer>(*Constructor)(LayerParams ¶ms);
代替函数名。这意味着变量(*Constructor)
是指向函数的指针。它指向的函数将对Constructor
的引用作为参数,并返回LayerParams
。另请参见"Clockwise Spiral Rule"。 (请注意,该页面是关于C的。在C ++中,您还涉及左值引用(Ptr<Layer>
)和右值引用(&
)标记,但它们的工作方式类似于指针(&&
)标记。)
因此重新打开*
,
typedef
将类型typedef Ptr<Layer>(*Constructor)(LayerParams ¶ms);
定义为具有参数Constructor
并返回类型LayerParams&
的函数指针。
所有这些混乱是在新代码中首选较新的Ptr<Layer>
样式类型别名语法的一个很好的理由(如果不需要与C ++ 03兼容)。可以定义相同的类型:
using