I thought of a quick addendum to Monday’s article on covariant, templatized copy constructors. The end of that article said
[T]here is a large caveat that you may have noticed. Due to the the inversion of the inheritance hierarchy around the cloning mixins, we have completely lost the ability to construct derived objects using anything but the default constructor. If you need to construct a
Derived
(which is really aCloneable<Derived_>
) and pass an argument to theDerived_
constructor, you cannot.
And then I go on to suggest using a factory pattern that is aware of the quirky type hierarchy described in that post. But in fact there is a relatively elegant way around this problem without using factories.