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:
templateclass checkBase : public type{ //.....same as above}templateclass checkChild: public checkBase{ //.....same as above};//To use get() as virtual:checkBase* chk = new checkChild;chk->get();// invokes child function//to use get() as non-virtual:checkBase* chk_1 = new checkChild;chk_1->get();// invokes base function