templeteCalc.h
template<class T>
class Calc
{
public:
Calc(T Oper1, T Oper2):m_Oper1(Oper1),m_Oper2(Oper2){}
virtual ~Calc(){}
virtual T GetResult() = 0;
protected:
T m_Oper1;
T m_Oper2;
};
#define FactoryOper(ClassName, Type, Oper)\
class ClassName:public Calc<Type>\
{\
public:\
ClassName(Type Oper1, Type Oper2):Calc<Type>(Oper1,Oper2){}\
virtual ~ClassName(){}\
Type GetResult()\
{\
return m_Oper1##Oper##m_Oper2;\
}\
};
main.cpp
#include "stdio.h"
#include "templeteCalc.h"
template <class Type>
FactoryOper(AddOper,Type, +)
template <class Type>
FactoryOper(ReduceOper,Type, -)
template <class Type>
FactoryOper(MultiOper,Type, *)
template <class Type>
FactoryOper(DevideOper,Type, /)
#define Class_Type int
int main()
{
AddOper<Class_Type> add(1,2);
Calc<Class_Type> *calc = &add;
printf("%d",calc->GetResult());
return 0;
}