gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 22:35:17 25 4
gpt4 key购买 nike

我在 OpenCV 论坛上发布了这个问题,但由于它似乎不像 SO 那样活跃,我仍在尝试看看是否有人可以帮助我理解这行代码,而无需太多 OpenCV 源代码背景。

基本上,我无法理解 OpenCV 源代码中的这行代码:

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

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

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

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

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

谢谢!

最佳答案

弄清楚什么是typedef定义意味着,你看看如果 typedef 会声明什么变量关键字不存在:

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

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

所以把 typedef回来,

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

定义类型 Constructor成为带有参数 LayerParams& 的函数指针的类型并返回类型 Ptr<Layer> .

所有这些混淆是更喜欢更新的 using 的一个很好的理由新代码中的 -style 类型别名语法(如果它不需要与 C++03 兼容)。可以定义相同的类型:

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

关于C++ `typedef Ptr<Layer>(*Constructor)(LayerParams &params);`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55290141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com