【问题标题】:Pointers: What does this line of code mean?指针:这行代码是什么意思?
【发布时间】:2016-06-22 14:03:23
【问题描述】:

我是编程新手,但今年夏天有实习,我正在努力让这段代码运行。

我正在查看其他人的 c++ 代码(“三角网格的精确测地线”开源),其中一行让我感到困惑。反正行如下:

geodesic::Mesh* mesh = algorithms[algorithm_id]->mesh();

如果我错了,请纠正我,但首先要初始化一个指针。好像

class::pointerclass* thingpointedto = something[something] accessing member mesh();

我不知道等号操作数右侧的代码是什么意思。谁能帮帮我?

【问题讨论】:

  • 你有错字吗?指向成员运算符->的指针不能有空格。
  • algorithms 是一个数组/向量/映射(或其他具有重载operator[] 的类型)。它显然返回一个指向带有 mesh() 成员的东西的指针,该成员返回另一个指针。
  • algorithm 是一个算法数组。 algorithm_id 是一个索引(算法在所有提供的算法中的数量),所以你首先得到一个给定的算法。一旦你得到一个算法(注意它只是一个算法的指针),你只需调用它的方法mesh(),它会返回一些计算的Geodesic::Mesh结构的地址。
  • 我很难理解第二个粗体行,但第一个粗体行意味着(假设它已正确编译)1)有一个名为 algorithms 的数组,其中包含指向某个类的对象的指针(此处未指定)2)该类具有成员函数mesh(),该函数返回指向类geodesic::Mesh的对象的指针3)这行代码定义了一个指向geodesic::Mesh的指针,称为mesh并使用方法的结果对其进行初始化'mesh()` 使用数组algorithm_idth 指针algorithms调用

标签: c++ class pointers


【解决方案1】:

看看潜在的source 我会说它是std::vector<algorithm_shared_pointer>。其中algorithm_shared_pointerboost::shared_ptr<geodesic::GeodesicAlgorithmBase> 的类型定义。

geodesic::Mesh* mesh = algorithms[algorithm_id]->mesh();

geodesic 是一个命名空间,Mesh 类位于该命名空间中。我们创建一个指向该类的指针。指针被分配了函数调用mesh() 的结果,可以由geodesic::GeodesicAlgorithmBase 调用。 algorithm_id 是一个 int,它作为参数提供给包含此行的函数。

这个整数用于选择向量中的索引。


这会导致:

namespace::pointerToClass* nameOfPointer 
    = std::vector<boost::shared_ptr<geodesic::GeodesicAlgorithmBase>>[int]->mesh();

考虑到由于mesh() 返回类型为geodesic::Mesh*,它可能使用了auto,这是一段奇怪的代码。

【讨论】:

    【解决方案2】:
    geodesic::Mesh* mesh = algorithms[algorithm_id]->mesh();
    

    这里,algorithms 可以是以下类型:

    • 数组指针,在这种情况下,它由 integral 类型的整数索引,algorithm_id
    • 具有过载operator[] 的顺序容器,例如std:vector,其索引为整数类型整数algorithm_id
    • 具有重载 operator [] 的关联容器,例如 std::map,使用键类型对象 algorithm_id 进行索引
    • 具有重载 operator [] 的自定义类型,使用自定义类型对象进行索引,algorithm_id 由其签名指示

    数组[] 访问返回一个指向具有成员函数mesh() 的对象的指针(常规或智能指针),该函数返回指向geodesic::Mesh 对象的指针。

    algorithms[algorithm_id] 的返回值不是 binded 任何东西,而是持有作为临时的(如果它还不是一个引用);然后调用它的成员函数mesh()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多