Ever need to use the same member function from a inheritance hierarchy as both virtual
and non-virtual? This code shows you how to do it dynamically, using a template.
Suppose you have the following inheritance hierarchy:
class checkBase
{
public:
void get()
{cout << "checkBase" << endl;}
};
class checkChild: public checkBase
{
public:
void get()
{ cout << "checkChild" << endl;}
};
Now, suppose you need to use
get() as virtual and non-virtual. Here's what to do:
class ToSupportVirtual
{
public:
virtual void get () = 0;
};
class ToSupportNonVirtual
{
public:
void get()
{}
};
Now convert both existing classes into templates:
template<class type>
class checkBase : public type
{
//.....same as above
}
template<class type>
class checkChild: public checkBase<type>
{
//.....same as above
};
//To use get() as virtual:
checkBase<ToSupportVirtual>* chk = new checkChild<ToSupportVirtual>;
chk->get();// invokes child function
//to use get() as non-virtual:
checkBase<ToSupportNonVirtual>* chk_1 = new
checkChild<ToSupportNonVirtual>;
chk_1->get();// invokes base function