Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: Beginner
Apr 4, 2005

Detect an Operator Overloading a Class

How can you detect if a class overloads a particular operator when you don't have the source for the class? You can define the operator globally so that it accepts all user defined types:

class no_operator {};

class Any
{
public:
   Any(...){cout<<"this is a placeholder for all kinds of UDTs"};
};

Disclaimer : ellipsis does not ensure type safety.

no_operator& operator+(const Any &,const Any &) 
{
   cout << "operator not present"<<endl;
   no_operator tmp;
   return tmp;
}
The above operator will be invoked for an add operation involving at least one UDT—if the operator + is not overloaded in the UDT. For example:

class Foo {
public:
   Foo(){}
   Foo & operator +(const Foo& a)
   {
   cout<<"operator ovverloaded"<<endl;
   return *this;
   }
};

then,

int i;
Foo FooObj;

FooObj+i;   //will call Foo::operator+
i+FooObj;   //will call global operator+ since friend Foo&
// operator +(int i, const Foo& a) is not defined
This can be detected as follows:

if(strcmp(typeid(FooObj+i).name(),"class Foo")==0)
   cout<< "OVERLOADED" << endl;
   else cout <<"NOT OVERLOADED"<<endl; 
Vishakha Vaidya
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap