#include
using namespace std;
class Base {
public:
Base() {};
~Base() {};
};
template
class Derived: public Base {
T _val;
public
You can use dynamic_cast
Derived * d = dynamic_cast *>(b);
If the cast fails (the base pointer does not point to the requested derived type), it returns null.
However, for dynamic_cast to work, your base class must have at least one virtual function. I suggest you make the destructor virtual (this is also prevents other potential problems deleting your objects).
Use of dynamic_cast may indicate bad design in your code.
Note that if you are 100% sure the base pointer, points to your derived type, then you may replace it with static_cast, which is slightly faster. Personally I prefer the extra safety check in general.