ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
805372 Топик полностью
Ксения (29.12.2017 09:32 - 09:35, просмотров: 159) ответил fk0 на Есть ОГРОМНЕЙШИЕ фортран-библиотеки. Там нет никаких C++ и объектов. И очень лёгкий интерфейс с C-кодом. И ведь как-то обошлись... Те же вектора не обязательно через operator+ складывать, а не через спец. функцию вызванную вручную.
Вот вам пример простейшей функции для умножения двух матриц из одной такой библиотеки (BLAS): void dgemm( const char *transa, const char *transb, const MKL_INT *m, const MKL_INT *n, const MKL_INT *k, const double *alpha, const double *a, const MKL_INT *lda, const double *b, const MKL_INT *ldb, const double *beta, double *c, const MKL_INT *ldc); Но вы упаритесь подставлять в нее параметры всякий раз, когда вам нужно будет произвести такое умножение. Для того и нужно определить оператор умножения, чтобы вся эта хрень :) скрылась с глаз долой. Сюда же стоит добавить, что на Фортране матрицы хранятся в памяти, уложенные по столбцами (1-ый столбец, 2-ой и т.п. до последнего), тогда как как в С/С++ матрицы хранятся в памяти, уложенные по строкам (1-ая строка, 2-ая и т.п. до последней). И это обусловлено тем, как в языке интерпретируются индексы двумерного массива: в С/С+ первый индекс - номер строки, второй индекс - номер столбца, а в Фортране всё наоборот. Сказанное не означает, что фортрановскими библиотеками на C/C++ нельзя пользоваться (например, я пользуюсь), однако при этом надо хитро переставлять индексы и указатели у такого рода библиотечных функций, чтобы не прибегать к явному транспонированию (тем более, когда его реализация на прямоугольных матрицах встречает затруднения). Все это делает работу с оригинальной библиотекой практически невозможной из-за опасности возникновения трудно проверяемых ошибок. Тогда как оператор способен еще и проверять размерность перемножаемых объектов и предупредить, если что-то не так.