AGameModeBase.h contains function declaration GetDefaultPawnClassForController, but in AGameModeBase.cpp there is no implementation of GetDefaultPawnClassForController, instead of it there is GetDefaultPawnClassForController_Implementation implementation. And it’s not only related to GetDefaultPawnClassForController function, there are other functions implemented in the same way. How it’s working, what is the reason for do functions in this way and which function i should override in my nested classes?
Some types of functions require _Implementaion in the end, because the main part of the function is executed elsewhere. For instance, BlueprintNativeEvent will be executed in the blueprint, but you the _Implementaion part in C++ can have additional functionality to it.
Or network functions, where a part is created somewhere in the .generated file, but the _implementation is for you to use.
So as I understand it, you need _Implementation when a function is split in two parts, so to say.
Maybe someone will give more details.
As Tuerer points out, this is part of the BlueprintNativeEvent implementation requirements.
In C++, you’ll always override the _Implementation version. The non-Implementation function isn’t virtual so there’s no way to override it in C++. For Blueprint, it doesn’t really matter which is which, though calling the parent version from Blueprint will call the _Implementation function as you would expect.
Other cases of _Implementation functions where BlueprintNativeEvent isn’t present, it’s just a choice that the programmer made for one reason or another.