
Hi, I have 3 classes: 1. class Base { public: virtual Base *createDerived() { return 0; } }; 2. template <class T> class BaseT : public Base { public: virtual Base *createDerived() { return new DerivedT<T>(); //nicht smart, because DerivedT must be known } }; 3. template <class T> class DerivedT : public BaseT<T> { }; So far so good. Or not. But now the problems are starting. Base *base = new BaseT<int>; This object it created at a place that is not known where I want to create: Base *derived = base->createDerived(); //base is a Base * The result is an object that has the same template type as 'base'. Finally I got my desired result, but the problem is the relation downward relation between BaseT and DerivedT. My preferred way would be something like a factory: class Factory { public: template <class T> static Base *createDerived<T>() { return new DerivedT<T>(); } }; But how can I tell the factory which type to be used. Base *derived = Factory::createDerived<sameAsBase> (base); //base is a Base * I think there is no "normal" C++ language support. But Boost has some methods that by-pass some language constraints. I took a loot at something like 'typeof'. But I don't get the things together. Has anybody any idea? Or is it impossible to do this? Kind regards Steffen