Сравните connection_hdl (weak_ptr) на равенство
Мне нужно сравнить два websocket ++ connection_hdl:
// Create a weak pointer on the heap using that shared_ptr.
// Cast that weak pointer to void* and manage it using another shared_ptr
// connection_hdl hdl(reinterpret_cast<void*>(new connection_weak_ptr(con)));
Я пробовал этот код
template <typename T, typename U>
inline bool equals(const connection_hdl<T>& t, const connection_hdl<U>& u)
{
return !t.owner_before(u) && !u.owner_before(t);
}
но компилятор жалуется, что connection_hdl is not a template
,
Можно ли изменить приведенный выше код для сравнения connection_hdls? connection_hdls может использоваться с контейнерами с помощью owner_less, поэтому, исходя из моей неопытности, можно предположить, что владение может использоваться для сравнения.
Единственный другой связанный метод, который я могу найти, - это сравнение наборов weak_ptrs.
bool result = !(std::lexicographical_compare(set1.begin(), set1.end(),
set2.begin(), set2.end(),
set1.value_comp()) ||
std::lexicographical_compare(set2.begin(), set2.end(),
set1.begin(), set1.end(),
set1.value_comp()));
что, кажется, близко к моим потребностям, но я не могу быть уверен или переработать этот код в соответствии с моими намерениями из-за моей неопытности.
Как можно сравнить два connection_hdls на равенство?
это безопасно?
Я изменил первый код к этому
bool connections_equal(connection_hdl t, connection_hdl u)
{
return !t.owner_before(u) && !u.owner_before(t);
}
и это компилируется. Это безопасно, кроме предостережения о пустом месте Моя неопытность мешает мне точно определить, в то время как мой ограниченный опыт говорит мне, что только то, что он компилируется, не означает, что он будет работать так, как ожидалось.