给定两个相同类型的 std::iterators,如何测试它们是否来自同一个对象(不是类)?请注意,我不是在问如何比较它们的值。
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 方法,它执行我想要的检查,但在失败时它会发出调试断言。它在发布版本中不会被注意到。
进一步看,我看到迭代器(至少对于字符串)有一个公共_GetCont()
方法。所以
if ( iter1._GetCont() == iter2._GetCont() )
作品。但是,这是无证的,导致我相信使用它不安全。
我的问题是如何以便携的方式完成上述任务?
还要注意,这是迭代器模板类的一部分。我将无法控制第二个迭代器。