NOTE: This is templated rather than a polymorphic wrapper because a lot code expects the physical layer not to be a wrapper. It also has the benefit of not needing updating every time a new function is added toIPlatformFile.