using namespace std;
//============================================================================================!
#define PREDEFINE(anytype) template<typename anytype>
#define SPECIALISEDTEMPLATE(Class,SpecialType) template<> class Class<SpecialType>
//============================================================================================!
PREDEFINE(Precision)
class MyClass
{
public :
MyClass();
void Foo(Precision A);
PREDEFINE(Precision2) void Foo(Precision2 B);
private :
Precision mA;
};
//=======================================================================================!
template<typename Precision>
MyClass<Precision>::MyClass()
:mA((Precision) -1)
{
}
//=======================================================================================!
template<typename Precision>
void MyClass<Precision>::Foo(Precision A)
{
//Do something here
mA = A;
}
//=======================================================================================!
template<typename Precision>
PREDEFINE(Precision2)void MyClass<Precision>::Foo(Precision2 B )
{
mA = (Precision)B;
}
//=======================================================================================!
// Template Specialization
//=======================================================================================!
SPECIALISEDTEMPLATE(MyClass,bool)
{
public :
void Foo()
{
mA = true;
}
MyClass():mA(false){}
private :
bool mA;
};
//========================================================================================!
int main()
{
MyClass<int> obj;
obj.Foo(25.f);
obj.Foo(25);
obj.Foo(25.000000011);
MyClass<bool> SpecialedObj;
SpecialedObj.Foo();
return 0;
}