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 UDTif 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;