在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的网页,无论如何相关?
答案 0 :(得分:1)
类型FOR_ATOMS_OF_MOL(a, mol)
的{{1}}宏构造a
。要返回OBMolAtomIter
,OBAtom
和*
运算符已超载。这就是->
无法直接传输到函数的原因,但a
和*a
的行为就好像a->
是a
。
http://openbabel.org/api/2.2.0/classOpenBabel_1_1OBMolAtomIter.shtml