Estou escrevendo uma biblioteca de álgebra linear (para encurtar a história, é uma tarefa da escola) que envolve matrizes, vetores etc. No processo de criação dessa biblioteca, vou criar funções que executam operações matemáticas em objetos. Por exemplo, transponha matriz, matriz invertida, normalize vetor etc.
Fiquei curioso para saber qual é a "melhor prática" para esse tipo de função ... Ou seja, devo fazer da função uma função membro ou não membro? (Para maior clareza / uso da biblioteca)
Exemplo:
//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);
Existe algum padrão em relação a esse tipo de operação? Ou, pelo menos, existe uma maneira comum de as pessoas fazerem isso? Estou inclinado para a primeira opção, mas gostaria de saber se isso é recomendado.