I propose adding constructors to the decorators from Particle* to express the third.I'm not sure I follow you - you want to add extra methods to Particle?It doesn't seem like that would scale - external modules could add their own decorators, and obviously they can't modify the Particle base class.
No, an extra method to decorator: a constructor from the particle*.
Agreed. I think you can do things like wrap all *Decorator::*Decorator calls, right? If that is so, it is pretty easy since there is already a method on the decorator to check if a Particle* is OK.If you replace checks with assertions, the Python interface would need to have some checking in it, because we don't want to crash the interpreter if somebody has a typo in their script and uses the wrong decorator.