Piszę bibliotekę algebry liniowej (krótko mówiąc, jest to zadanie szkolne), która obejmuje macierze, wektory itp. W trakcie tworzenia tej biblioteki będę tworzyć funkcje, które wykonują operacje matematyczne na obiektach. Na przykład transponuj macierz, odwróć macierz, znormalizuj wektor itp.
Byłem ciekawy, jaka jest „najlepsza praktyka” dla tego rodzaju funkcji ... To znaczy, czy powinienem uczynić funkcję funkcją składową, czy też nie-członkiem? (Dla zachowania przejrzystości / wykorzystania biblioteki)
Przykład:
//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);
Czy istnieje jakiś standard dotyczący tego rodzaju operacji? A przynajmniej czy istnieje jakiś powszechny sposób, w jaki ludzie to robią? Skłaniam się ku pierwszej opcji, ale chciałbym wiedzieć, czy jest to zalecane.