Open Babel ライブラリには、OBMolAtomiter など、OBMol クラスのイテレータ オブジェクトが多数定義されています。リンクされたページには、使用方法を示す次のコード サンプルがあります。
#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に関するページを見つけましたが、とにかく関連していますか?