Poco is a great C++ learning too for me.
That being said I have been trying to understand the rational behind the usage of the *Impl in many Poco object:
For example Pipe has a pointer to PipeImpl, same goes for Socket which has a socket to SocketImpl and so forth. Why this design choice versus inheritance.
At first I though this was a way to speed up compilation by using a forward declaration of the Implement object but each .h file includes it's Impl.h counterpart so that's not it.