在Open Babel库中,为OBMol类定义了许多迭代器对象,例如OBMolAtomiter。在链接的页面上,有以下代码示例说明了用法。

  #include <openbabel/obiter.h>
  #include <openbabel/mol.h>

  OpenBabel::OBMol mol;
  double exactMass = 0.0;
  FOR_ATOMS_OF_MOL(a, mol)
  {
     // The variable a behaves like OBAtom* when used with -> and * but
     // but needs to be explicitly converted when appearing as a parameter
     // in a function call - use &*a

     exactMass +=  a->GetExactMass();
  }


FOR_ATOMS_OF_MOL(a, mol)扩展为for循环,a被声明为迭代器类型。mol是要迭代的现有分子)

我想问一下,为什么注释中描述的&*p是必要的。当我将迭代器传递给需要指针的函数时,其行为是代码可以编译,但程序的行为却很奇怪。

我尝试使用Google进行搜索,找到了有关iterator_traits的页面,是否与之相关?

最佳答案

FOR_ATOMS_OF_MOL(a, mol)宏构造类型为aOBMolAtomIter。要返回OBAtom*->运算符已重载。这就是为什么a无法直接传递给函数,而*aa->的行为就像aOBAtom *的原因。

http://openbabel.org/api/2.2.0/classOpenBabel_1_1OBMolAtomIter.shtml

09-28 06:55