Здравствуйте, Qbit86, Вы писали:
Q>using System;
Q>using System.Collections.Generic;
Q>internal class GenericEqualityComparer<T> : EqualityComparer<T> where T : IEquatable<T>
Q>{
Q> public override bool Equals(T x, T y)
Q> {
Q> if (x != null)
Q> {
Q> if (y != null) return x.Equals(y);
Q> return false;
Q> }
Q> if (y != null) return false;
Q> return true;
Q> }
Q> public override int GetHashCode(T obj) => obj?.GetHashCode() ?? 0;
Q> // ...
Q>}
Ну и чего ж этой реализации не хватило на все случаи?
Что не так-то?
Что именно не удалось выразить через "параметрический полиморфизм"?
V>>Тут нечего далее обсуждать. Усё, припыли.
[Картинка скипнута]
template<typename T>
bool is_equal(const T * x, const T * y) {
if(x)
return y ? *x == *y : false;
return !y;
}
template<typename T>
bool is_equal(const T & x, const T & y) {
return x == y;
}
Вот и всех делов на все случаи жизни.
Дарю.