同じ型の std::iterator が 2 つある場合、同じオブジェクト (クラスではない) からのものかどうかをどのようにテストできますか? 注意してください、私はそれらの値を比較する方法を尋ねているわけではありません.
std::string foo = "foo";
std::string bar = "bar";
std::string::iterator iter1 = foo.begin();
std::string::iterator iter2 = bar.begin();
if ( iter1 == iter2 )
{
...
}
上記は失敗するはずであり、実際に失敗します。実行時にこれを確認するにはどうすればよいですか? ソース コードを調べると、関連するメソッド コールが必要なiterator::_Compat()
チェックを行う void メソッドであることがわかりますが、失敗するとデバッグ アサーションが発行されます。これは、リリース ビルドでは見過ごされます。
さらに見てみると、イテレータ (少なくとも文字列の場合) には public_GetCont()
メソッドがあることがわかります。そう
if ( iter1._GetCont() == iter2._GetCont() )
動作します。しかし、これは文書化されていないため、安全に使用できないと私は信じています。
私の質問は、上記を移植可能な方法でどのように達成できるかということです。
また、これは反復子テンプレート クラスの一部です。2 番目の反復子を制御することはできません。