Я пишу библиотеку линейной алгебры (короче говоря, это школьное задание), которая включает в себя матрицы, векторы и т. Д. В процессе создания этой библиотеки я буду создавать функции, которые выполняют математические операции над объектами. Например, транспонировать матрицу, инвертировать матрицу, нормализовать вектор и т. Д.
Мне было любопытно, какова «лучшая практика» для такого рода функций ... То есть я должен сделать функцию функцией-членом или не-членом? (Для наглядности / пользуйтесь библиотекой ради)
Пример:
//Member function way:
B = A.transpose();
C = A.inverse();
//Non-member function way:
B = linalg::transpose(A); //Non-member transpose function in linear algebra namespace
C = linalg::inverse(A);
Есть ли какой-то стандарт в отношении таких операций? Или, по крайней мере, есть ли общий способ, которым люди делают это? Я склоняюсь к первому варианту, но я хотел бы знать, рекомендуется ли это.