Как насчет макропакета, чтобы иметь эффект __restrict
при времени компиляции : (ниже псевдокод, не проверен):
#define Multiply(A,B,C) Multiply_restrict(&A, &B, &C)
Теперь промежуточный метод определяется как,
inline void Multiply_restrict(const MatrixMN* __restrict pA,
const MatrixMN* __restrict pB, MatrixMN* __restrict pC)
{
Multiply_(*pA, *pB, *pC);
}
И, наконец, просто добавьте _
после вашего исходного Multiply
:
void Mutliply_(const MatrixMN& a, const MatrixMN& b, MatrixMN& out);
Таким образом, конечный эффект будет точно таким же, как вы звоните:
Multiply(x, y, answer);