use*_*536 11 c++ equality map shared-ptr
shared_ptr的相等运算符定义如下:
template<class T, class U> inline bool operator==(
shared_ptr<T> const & a, shared_ptr<U> const & b)
{
return a.get() == b.get();
}
Run Code Online (Sandbox Code Playgroud)
这似乎破了.把这种平等转移到a和b所指的是不是更好?或者这是对图书馆用户的不公平限制(因为他们必须提供一个平等运营商)?
如果我有一个包含shared_ptrs的map或hash_table,那么当前定义会使等式无法使用.例如,考虑一下
std::map<int, std::tr1::shared_ptr<T> > m1, m2;
Run Code Online (Sandbox Code Playgroud)
我们不想检查m1和m2中每个int的ptrs是否指向相同的值?
我可以通过展平m1,m2 out来实现我自己的相等性(从每个构造集合,沿途取消引用shared_ptrs).是否有一个STL技巧可以完成这个或其他方式在shared_ptrs存在的情况下整齐地测试相等性?
我认为这个想法是比较两个shared_ptr实例和比较两个指针一样有用.如果你想要一个std::map包含shared_ptrs 或普通旧指针的对象,你将不得不用比较两种情况下指向对象的东西来覆盖谓词.
在比较两个映射的情况下,您可能希望使用std::equal带有谓词的版本.
| 归档时间: |
|
| 查看次数: |
16280 次 |
| 最近记录: |