Open Babelライブラリには、OBMolAtomiterのようなOBMolクラスのイテレータオブジェクトが多数定義されています。リンクされたページに、使用法を示す次のコードサンプルがあります。Open Babel C++ API関数の引数として直接使用するカスタムイテレータを使用できないのはなぜですか?
#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)
はサイクルのために、a
がイテレータ型であると宣言されている。mol
を反復処理するために、既存の分子であるに展開)
&*p
事はで説明し、なぜ私は、お願いしたいと思いますコメントが必要です。ポインタを期待する関数にイテレータを渡したときの動作は、コードがコンパイルされていても、プログラムが奇妙に動作することです。
Googleで試したところ、iterator_traitsについてのページが見つかりました。
この問題は申し訳ありません。私は何とかSTLイテレータを「互換性のある」ポインタ型にキャストでき、Babelのものができないのか疑問に思っていました。さて、イテレータをキャストすることはできません。 – user7610
私のプログラムは、boolへの変換を定義しているので、OBMolAtomiterオブジェクトをintにキャストすることが可能であるため、奇妙な動作をします。私が呼び出す関数は、OBAtom *とintの両方を受け入れるためにオーバーロードされているため、起こっていたことが起こっています。 – user7610