Open Babel C ++ API为什么不能将它们的自定义迭代器直接用作函数的参数?

时间:2012-04-25 16:48:53

标签: c++ iterator type-conversion

在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内容是必要的。我将迭代器传递给需要指针的函数时的行为是代码编译,但程序行为奇怪。

我尝试使用谷歌,我找到了关于iterator_traits的网页,无论如何相关?

1 个答案:

答案 0 :(得分:1)

类型FOR_ATOMS_OF_MOL(a, mol)的{​​{1}}宏构造a。要返回OBMolAtomIterOBAtom*运算符已超载。这就是->无法直接传输到函数的原因,但a*a的行为就好像a->a

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