I personally think that is the only approach that is viable in terms of 2 considerations important to me: a) be standard-conforming and b) be readable and maintainable even if it involves verbosity.
Here’s an example with the opaque (void *) pointer I had provided on another forum a while ago.