几个不同逻辑间参数传递弱化的技巧

1.线程间

 

HANDLE WINAPI CreateThread(
  __in          LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in          SIZE_T dwStackSize,
  __in          LPTHREAD_START_ROUTINE lpStartAddress,
  __in          LPVOID lpParameter,
  __in          DWORD dwCreationFlags,
  __out         LPDWORD lpThreadId
);

 


比如它的第四个参数  LPVOID lpParameter, 接受到后,通过一个强转成自己所需要的类型。最大的优点是类型上的直接转换显得更直观。但是在一些框架模式上的封装就显得很薄弱。


2.联合结构(union)

 

typedef struct in_addr {
        union {
                struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { USHORT s_w1,s_w2; } S_un_w;
                ULONG S_addr;
        } S_un;

 

这是套接字接口里的一个写法,可以把几种不同平台下的代码写在一起。 这种方法更多是为了兼容性。 


3.动态(virtual)

比如一个线程封装得代码可以这样写:

class IThread
{
public:
	virtual S32 Run()=0;	
	virtual S32 Exit()=0;
};

static U32 WINAPI ThreadProc(void* param)
{
	S32 nResult;
	ThreadCtrl *pTC = (ThreadCtrl *)param;

  nResult = pTC->pIThread->Run();
	
	return 0;
}

class CThreadPool
{
public:
	int ExecuteTask(IThread *p)
	{
	    _beginthreadex(NULL, 0, ThreadProc, this, 0, ..);
	}

};
 通过继承IThread的run接口,然后交给CThreadPool统一处理。通过指针和动态,实现了原先对接口参数显示传递的隐藏

 

 


4.模板

这就没什么好说的了,编译的时候特化。不好的地方就是代码膨胀。


个人更喜欢第一种的使用和第三种的封装的结合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值