devxlogo

Dynamically Choose the Virtuality of a Member Function

Dynamically Choose the Virtuality of a Member Function

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 

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

devx-admin

Share the Post: