Best practice for broadcastable callables

For example, I can define

vapply!(f::VCompose, y, x) = y .= f.f.(f.g.(x))

to avoid allocations in my example.