LINUX.ORG.RU

История изменений

Исправление AIv, (текущая версия) :

сравните

template <int D, typename T1, typename T2>
inline typename std::enable_if<(D>1), Vec<D,decltype(T1()+T2())>>::type
operator + (const Vec<1, T1> &a, const Vec<D, T2> &b){
    Vec<D,decltype(T1()+T2())> r;
    for(int i=0; i<D; i++) r.p[i] = a.p[0]+b.p[i];
    return r; }                                                             

и
template <int D, typename T1, typename T2>
inline Vec<D,decltype(T1()+T2())>>
operator + (const SvVec<T1> &a, const Vec<D, T2> &b){
    Vec<D,decltype(T1()+T2())> r;
    for(int i=0; i<D; i++) r.p[i] = a.val+b.p[i];
    return r;
}
                                                             

У меня, видимо, какая-то своя линейная алгебра, провинциальная, из церковно-приходской школы.

Вы на себя наговариваете. Ваша линейная алгебра соврешенно номальная, классическая, и есть например в матлабе - там даже для скалярного умножения двух векторов нужно что бы один был строкой а другой столбцом. Все очень строго, но жутко неудобно (в тех задачах которые я решаю).

У меня же например операция & перегужена для покомпонентного перемножения векторов - в линейке нету, а в жизни сплошь и рядом встречается...

Исходная версия AIv, :

сравните

template <int D, typename T1, typename T2>
inline typename std::enable_if<(D>1), Vec<D,decltype(T1()+T2())>>::type
operator + (const Vec<1, T1> &a, const Vec<D, T2> &b){
    Vec<D,decltype(T1()+T2())> r;
    for(int i=0; i<D; i++) r.p[i] = a.p[0]+b.p[i];
    return r;  }                                                               
и
template <int D, typename T1, typename T2>
inline Vec<D,decltype(T1()+T2())>>
operator + (const SvVec<T1> &a, const Vec<D, T2> &b){
    Vec<D,decltype(T1()+T2())> r;
    for(int i=0; i<D; i++) r.p[i] = a.val+b.p[i];
    return r;  }                                                             

У меня, видимо, какая-то своя линейная алгебра, провинциальная, из церковно-приходской школы.

Вы на себя наговариваете. Ваша линейная алгебра соврешенно номальная, классическая, и есть например в матлабе - там даже для скалярного умножения двух векторов нужно что бы один был строкой а другой столбцом. Все очень строго, но жутко неудобно (в тех задачах которые я решаю).

У меня же например операция & перегужена для покомпонентного перемножения векторов - в линейке нету, а в жизни сплошь и рядом встречается...