One of the tenants I am working upon is to write code that initially fits, but in later chapters revist it to fit changing circumstances. This is meant more as a learning exercise than as a coding template.
For example, in Part 4, I introduce the VisibleGameObject class, which owns an sf::Image class. Then I present a PlayerPaddle class, which loads an image to represent the player's paddle. In a future chapter, I will present an AI Paddle class, which will result in the duplicate loading of the same Image file, and will then present a class to rectify this inefficiency.
I hope that made sense.
I also should have named Gameloop() as GameloopIteration() or something similar, as the current name is misleading. I regret how I structured that aspect of the code for clarities sake and will probably refine it. Making the initial Game class static also probably introduced a level of complexity that could have been avoided, although by the end of the process, I think it will still prove to be the right decision.