C++的宏的示例

由于在前段时间写了一个关于c/c++的宏的使用的自我总结,但实际在那个简单的总结中,很多内容并没有总结的很完善。作为个人的随笔,我也抛上来自己的写的一个简单的使用宏的代码,欢迎大家挑毛病:


#include <stdio.h>

#define CompareOperatorDefine(T, oper)	\
	bool operator##oper(const T& rh)	\
	{								\
	return this->value_ oper rh.value_;	\
	}								\

#define CompareOperatorDefine2(T, t, oper)	\
	bool operator##oper(const t value )	\
	{								\
	return this->value_ oper value;	\
	}								\

#define SelfOperDefine(T, oper)	\
	T operator##oper(int)		\
	{							\
		T ref(this->value_);			\
		oper this->value_;			\
		return ref;				\
	}						\

#define SelfOperDefine2(T, oper)	\
	T& operator##oper()			\
{							\
	oper this->value_;			\
	return *this;			\
}							\

#define InterOperDefine(T, t, oper)	\
	T& operator##oper(t inter)	\
{								\
	this->value_ oper inter;			\
	return *this;				\
}								\

#define TypeDefine(T, t, f)					\
class T:public BaseType					\
{										\
public:									\
	T(){};								\
	T(t value){ value_ = value; };		\
	~T(){}								\
	\
	virtual const char *name()			\
{								\
	static char name[40];			\
	sprintf(name, "%s", #T);		\
	return name;						\
}									\
	\
	virtual const char *toString()		\
{									\
	static char valuestr[20];			\
	sprintf(valuestr, "%%%s", #f);	\
	sprintf(valuestr, valuestr, value_);\
	return valuestr;				\
}									\
	\
	SelfOperDefine(T, ++)\
	SelfOperDefine(T, --)	\
	SelfOperDefine2(T, ++)	\
	SelfOperDefine2(T, --)	\
	\
	InterOperDefine(T, t, +=)	\
	InterOperDefine(T, t, -=)	\
	\
	CompareOperatorDefine(T, >)	\
	CompareOperatorDefine(T, <)	\
	CompareOperatorDefine(T, ==) \
	CompareOperatorDefine(T, >=)\
	CompareOperatorDefine(T, <=)\
	CompareOperatorDefine(T, !=)\
	CompareOperatorDefine2(T, t, >)\
	CompareOperatorDefine2(T, t, <)\
	CompareOperatorDefine2(T, t, ==)\
	CompareOperatorDefine2(T, t, >=)\
	CompareOperatorDefine2(T, t, <=)\
	CompareOperatorDefine2(T, t, !=)\
	\
private:								\
	t value_;							\
};										\

class BaseType
{
public:
	BaseType(){}
	~BaseType(){}

	virtual const char *name() { return "BaseType"; }
	virtual const char *toString(){ return ""; }
};

TypeDefine(Integer, int, d);
TypeDefine(UInteger, unsigned int, u);
TypeDefine(Character, char, c);
TypeDefine(UCharacter, unsigned char, c);
TypeDefine(Float, float, f);
TypeDefine(Short, short, d);
TypeDefine(Long, long, lld);
TypeDefine(ULong, unsigned long, llu);
TypeDefine(Double, double, g);

#undef CompareOperatorDefine
#undef CompareOperatorDefine2
#undef SelfOperDefine
#undef SelfOperDefine2
#undef InterOperDefine
#undef TypeDefine
在上述代码中,有几处需要说明的地方:

1. #define 是定义宏的关键字

2. #undef 撤销宏定义的关键字

3. A##B 这种表示将A和B以字符串的形式拼接,形成的结果就是AB

4. #A 这种表示将A的参数传入按照其对应的字符串解析,比如#A出来的结果就是“A”

你可能感兴趣的:(宏,示例,cc++)