考えてみた。
void mul(complex* result, const complex& a, const complex& b)
{
*result = a * b;
}

使う側(例:a*b+c*d)
complex a, b, c, d, e, f, g;
mul(&e, a, b);
mul(&f, c, d);
add(&g, e, f);

まぁまぁの可読性。