1

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に関するページを見つけましたが、とにかく関連していますか?

4

1 に答える 1

2

typeのFOR_ATOMS_OF_MOL(a, mol)マクロ構造。sを返すために、 and演算子がオーバーロードされています。そのため、関数に直接送信することはできませんが、であるかのように動作します。aOBMolAtomIterOBAtom*->a*aa->aOBAtom *

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

于 2012-04-25T16:53:34.187 に答える