之前的博文中一些提到但是没有单独列出来提供头文件的 函数。
MemOffset,ContainerOf :在单链表中就有提到
TEMPLATE_COMMA,GetRef:在AVL树中有提到
IsPointer:判断模版参数是不是指针类型,目前之前有介绍的类中暂时未使用到
就这些
这里具体给一下:
tool.h
#ifndef _tool_h_
#define _tool_h_
#include <Windows.h>
//计算结构成员在结构中的偏移量
#define MemOffset(ClassName, MemberName) \
((unsigned __int64)(&(((ClassName *)0)->MemberName)))
//根据结构成员地址计算结构对象地址
#define ContainerOf(MemberAddr , ClassName , MemberName) \
((ClassName *)((unsigned __int64)(MemberAddr) - MemOffset(ClassName , MemberName)))
//该宏是用来防止模版类型作为宏参数时
//模版定义中的逗号被分割解释成宏参数的问题
#define TEMPLATE_COMMA ,
//模板中用来处理模版参数是对象还是对象指针的模版函数
template <class T>
T& GetRef(T& o)
{
return o;
}
template <class T>
T& GetRef(T* o)
{
return *o;
}
//判断模版参数是不是指针类型的函数模版
template <class T>
struct IsPointer
{
enum { RESULT = false };
};
template <class T>
struct IsPointer<T*>
{
enum { RESULT = true };
};
const DWORD MY_MAX_DWORD = 0xffffffff;
const DWORD MY_MIN_DWORD = 0x00000000;
const int MY_MAX_INT = 0x7fffffff;
const int MY_MIN_INT = 0x80000000;
const WORD MY_MAX_WORD = 0xffff;
const WORD MY_MIN_WORD = 0x0000;
const BYTE MY_MAX_BYTE = 0xff;
const BYTE MY_MIN_BYTE = 0x00;
#endif