C++ Interface - please explain IMyInterface::Execute_MyInterfaceFunction(_delegateInstance[, params...]); syntax.

I’m trying to develop a peripheral device input plugin. The best examples out there are getnamo’s Hydra, Leap, and Myo plugins. I’ve communicated with him a bit, and he’s been very helpful, but there’s an undocumented feature he’s using that I still don’t understand and I can’t find any examples of in the source.

The topic is basically the same as at the end of this wiki entry. He is using these static function calls so that his module can fire off events in some UObject without specific knowledge of that UObject.

My basic understanding is the following:

In an interface header, you can declare non-virtual non-static UFUNCTION(BlueprintImplementableEvent) functions. The UHT will automatically generate static versions of these function declarations prefixed with Execute_ (e.g., OnArmMoved can be accessed with IMyoInterface::Execute_OnArmMoved(_UObjectInstance<, params…>), where _UObjectInstance is a pointer to an instance of a UObject that implements IMyInterface, whether in C++ or Blueprints.

Q1: Is this documented anywhere?

Q2: What are the (general) use cases for this pattern? I guess this is an alternative to iterating over all UObjects that may implement your interface when you already have reference to the specific one you want to fire.

Q3: Can the UFUNCTION(BlueprintImplementableEvent) declarations be virtual? Or must they be non-virtual, and also not implemented in the interface .cpp, in case an UObject that implements the interface chooses not to implement every function?

Q4: The lack of documentation on this, and also the apparent lack of usage of this pattern in the UE4 source, makes me wonder if this pattern is ‘not recommended’. Is that the case? Is this to be deprecated in favour of UE4’s delegate system (which BTW could also use a little more documentation)?

OK that’s a lot. Thanks for any help.