自己的底层代码库(十八)——一些工具函数代码

之前的博文中一些提到但是没有单独列出来提供头文件的 函数。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值