Ahah! being specific is always a good thing!
You can have multiple Child Of constraints on any object and change their influence value from 0 (inactive) to 1 (active) by either using Drivers linked to a Control object, or by simply going to the required frame in the Timeline, then enter the influence required in the influence field, RMB-Click the Influence field and select “Insert Single Keyframe”. That way you can pass the weapon from being a Child Of one object to being the Child Of another. I have never had issues with two constraints that have Inverse on one and not the other or Inverse on both. In case you haven’t tried that yet also, in which case I would need to see the blend file before I comment further to save myself any more embarrassment…
I use multiple Child Of constraints to move a camera from one track to the next for example, in one project I have 6 camera tracks with objects moving down each track, I then have 6 Child Of cons and 6 Track To cons on the camera and a control bone that when I move it from X = 0 to X = 6, it progressively moves the camera locations from one track to the next and also moves the camera focus point to look at the required new object. Passing the influence over a period of frames results in the object being smoothly passed from one location to the next rather than just jumping the influences across one frame.
You can keyframe any Text Entry box, such as Influence boxes or Transform boxes, etc. by RMB-Click the box and select “Insert Single/Multiple Keyframe(s)” as appropriate - changing constraint influences is a really useful tool.