list<CPoint> l;
l.push_back( CPoint(1,2) );
l.push_back( CPoint(30,40) );
l.push_back( CPoint(4,6) );
l.push_back( CPoint(70,80) );
CPoint * point = 0;
for ( list<CPoint>::iterator iter = l.begin();
iter != l.end();
iter++)
{
cout << iter->x << " , " << iter->y << endl;
// compilation error, I can't typcast it like below?
point = (CPoint *) iter;
}
上記の問題はiter
、ループ内を実際のデータ構造ポインターにどのようにタイプキャストするかということです。そうすれば、控えめに言っても、 のpoint.x
ようなコードを書くことができます。point.y
上記は私が書いたデモコードですが、実際には検索機能にこのコードがあります。リストにアイテムが見つかった場合、そのアイテムへのポインターが返されます。それ以外の場合は NULL になります。そのポインタを元に戻すには、イテレータを元のデータ構造ポインタに逆参照する必要がありますが、どうすればよいでしょうか? ありがとう。