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 << "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
See also  5 Tips for Working With an Onsite Interpreter

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist