From: Chris C. <ca...@al...> - 2011-11-05 15:38:08
|
[sorry to sit on this so long] On 26 October 2011 00:34, Tom Breton (Tehom) <te...@pa...> wrote: > When I implemented Expandfigurationcommand, I didn't know about Chord and > GenericChord. "Sets.h" doesn't jump out as containing chord classes, I > just stumbled on it recently. Sets.h is rather an old-school filename in Rosegarden terms -- we used to routinely put lots of classes into a single header, and this one is left over from those days. It's also some of the more ambitious and less satisfactory code in Rosegarden, at least in terms of how it is actually used and how fragile it can get. So there are highly likely to be problems there. > In doing so, I stumbled across a subtle issue with the AbstractSet > hierarchy: AbstractSet tries to call virtual functions in its ctor, via > initialise. That doesn't do what you want in derived classes. Having said that -- is this really the case? Looking at the last version before your changes, it looks as if initialise() was only called from the GenericChord (i.e. derived class) ctor, not from AbstractSet (base class) ctor. And GenericChord is not a base class of anything, things like Chord are just template specialisations of it. I agree that the design is wrong, though (AbstractSet really should be purely abstract), and I appreciate this sort of close attention to the logic of things. Let me know if you think I'm misreading it. For what it's worth, I don't see anything (more) wrong about the new code; I've no particular problem with the change. Chris |