C++ GDextension, code architecture and what does each GDREGISTER do

Godot Version

4.4.1 stable

Question

I am working on a tool in GDextension with C++ for my university course. I would like to use to modularize my code and try to separate some parts of the code that could be used for other things and separate parts that are more or less specific to some edge cases that might not come up for all users, depending on the data they use.

I think they key to this is understanding how to use GDREGISTER:

	GDREGISTER_RUNTIME_CLASS(CameraController);
	GDREGISTER_ABSTRACT_CLASS(CameraController);
	GDREGISTER_INTERNAL_CLASS(CameraController);
	GDREGISTER_VIRTUAL_CLASS(CameraController);

I know that GDREGISTER_CLASS is the most basic of them all, and the RUNTIME version is there to make the code only run when the game is played, so not in the editor. However, I have no idea and did not find any good resources that explain when should one use each of the versions.

As this is the first time I am using GDextension, I probably made other obvious mistakes. I am open to feedback on my code architecture and such. You can see my repo here.

Somehow I missed this.