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

Сообщение Re[8]: «Собаку съел» от 23.01.2017 9:37

Изменено 23.01.2017 10:09 Serginio1

Re[8]: «Собаку съел»
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, samius, Вы писали:


S>>>Но это еще не компаратор, это только его сигнатура. Осталось написать параметрически полиморфное тело компаратора и продемонстрировать как оно инлайнится.

S>> То есть

S>>
S>>System.Linq.Expressions.Expression<Func<int,int, int>> expr = (i,x) => i- x;
S>>

S>К сожалению, полиморфизма в этой записи я вообще не наблюдаю. Никакого. Где же он?
Это уже специализация. А дженерик метод ты удалил. А там как раз и используется обобщенный вариант
Для С++ это перегрузка оператора

На С++ ты тоже должен сделать перегрузку операторов сравнения
int operator>(shop v,shop w)
{
    if (strcmp (v.madein,w.madein)>0 ||
        strcmp (v.proiz,w.proiz)>0 ||
        strcmp(v.x.item,w.x.item)>0 
    ) return 1;

    return 0;
}


При этом этих вариантов сравнений может быть вагон и маленькая тележка для обычных SQL таблиц.


System.Linq.Expressions.Expression<Func<T,T,int>>



S>> А как использовать деревья выражений я тебе уже кучу ссылок давал.

S>Я в курсе, что это и как использовать. И работал с ними от момента их появления.
И чем тебе не нравится?
Инлайнинг в рантайме!
Это тебе не кодогенерация при специализации шаблона.
Re[8]: «Собаку съел»
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, samius, Вы писали:


S>>>Но это еще не компаратор, это только его сигнатура. Осталось написать параметрически полиморфное тело компаратора и продемонстрировать как оно инлайнится.

S>> То есть

S>>
S>>System.Linq.Expressions.Expression<Func<int,int, int>> expr = (i,x) => i- x;
S>>

S>К сожалению, полиморфизма в этой записи я вообще не наблюдаю. Никакого. Где же он?
Это уже специализация. А дженерик метод ты удалил. А там как раз и используется обобщенный вариант
Для С++ это перегрузка оператора

На С++ ты тоже должен сделать перегрузку операторов сравнения
int operator>(shop v,shop w)
{
    if (strcmp (v.madein,w.madein)>0) return 1;
    if (strcmp (v.madein,w.madein)<0) return 0;

    if (strcmp (v.proiz,w.proiz)>0) return 1;
    if (strcmp (v.proiz,w.proiz)<0) return 0;

    if (strcmp(v.x.item,w.x.item)>0) return 1;
    if (strcmp(v.x.item,w.x.item)<0) return 0;
    else return 0;
}


При этом этих вариантов сравнений может быть вагон и маленькая тележка для обычных SQL таблиц.


System.Linq.Expressions.Expression<Func<T,T,int>>



S>> А как использовать деревья выражений я тебе уже кучу ссылок давал.

S>Я в курсе, что это и как использовать. И работал с ними от момента их появления.
И чем тебе не нравится?
Инлайнинг в рантайме!
Это тебе не кодогенерация при специализации шаблона.