C ++ typedef Ptr <layer>(* Constructor)(LayerParams¶ms);`

时间:2019-03-21 22:23:33

标签: c++ opencv

我在OpenCV论坛上发布了这个问题,但是由于它似乎不如SO活跃,所以我仍在尝试看看是否有人可以在没有OpenCV源代码太多背景的情况下帮助我理解这一行代码。

基本上,我无法从OpenCV源代码中理解以下代码行:

typedef Ptr<Layer>(*Constructor)(LayerParams &params);

尤其是,我看不到typedef在这里的工作方式。这似乎与我在网上看到的典型typedef unsigned long ulong;示例非常不同。此处将哪种类型定义为哪种?

如果有帮助,Ptr是具有共享所有权的智能指针的模板类。

Constructor似乎在此确切代码中定义。

LayerParams是OpenCV中定义的数据结构。

谢谢!

1 个答案:

答案 0 :(得分:4)

要弄清楚chmod定义的含义,请查看如果typedef关键字不存在时将声明什么变量:

typedef

这类似于函数声明,除了我们用Ptr<Layer>(*Constructor)(LayerParams &params); 代替函数名。这意味着变量(*Constructor)是指向函数的指针。它指向的函数将对Constructor的引用作为参数,并返回LayerParams。另请参见"Clockwise Spiral Rule"。 (请注意,该页面是关于C的。在C ++中,您还涉及左值引用(Ptr<Layer>)和右值引用(&)标记,但它们的工作方式类似于指针(&&)标记。)

因此重新打开*

typedef

将类型typedef Ptr<Layer>(*Constructor)(LayerParams &params); 定义为具有参数Constructor并返回类型LayerParams&的函数指针。

所有这些混乱是在新代码中首选较新的Ptr<Layer>样式类型别名语法的一个很好的理由(如果不需要与C ++ 03兼容)。可以定义相同的类型:

using