Информация об изменениях

Сообщение Re: Без слов от 10.01.2017 17:23

Изменено 10.01.2017 17:39 vdimas

Re: Без слов
Здравствуйте, 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>}


Ну и чего ж этой реализации не хватило на все случаи?

Что не так-то?
Что именно не удалось выразить через "параметрический полиморфизм"?
Re: Без слов
Здравствуйте, 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;  
}


Вот и всех делов на все случаи жизни.

Дарю.