To the author : your explanation can be interpreted as "correct" but also be aware that -- for some readers -- your argument is a variation of the Turing Tarpit: https://en.wikipedia.org/wiki/Turing_tarpit
In other words, the 2 different possible receptions to your post:
- YES, file-level modularity with opaque structs is _equivalent_ to class private members --> for those mindsets already sympathetic to C Language
- NO, using file-scoping rules and structs is not equivalent to class private members because it's a bunch of extra ceremonial syntax to implement a workaround. (The "Turing Tarpit"). It's using the opaque struct as a "design pattern" and as Peter Norvig famously said, "Design patterns are bug reports against your programming language."