Сравните 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);
}

и это компилируется. Это безопасно, кроме предостережения о пустом месте Моя неопытность мешает мне точно определить, в то время как мой ограниченный опыт говорит мне, что только то, что он компилируется, не означает, что он будет работать так, как ожидалось.

0 ответов

Другие вопросы по тегам