在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)
宏构造类型为a
的OBMolAtomIter
。要返回OBAtom
,*
和->
运算符已重载。这就是为什么a
无法直接传递给函数,而*a
和a->
的行为就像a
是OBAtom *
的原因。
http://openbabel.org/api/2.2.0/classOpenBabel_1_1OBMolAtomIter.shtml