`

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

阅读更多

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.模板

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


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

2
2
分享到:
评论

相关推荐

    从六个角度分析流程建模

    总结来说,流程建模是一个多维度的分析过程,通过不同的视角揭示流程的结构、逻辑、组织、知识、目标和数据流动。理解并熟练运用这些视角可以帮助企业更好地理解和优化其业务流程,提高运营效率,促进持续改进。

    C语言程序设计说课稿.doc

    "C语言程序设计说课稿" ...因此,从知识基础、学习层次状况等几个方面分析学生,了解学生的知识基础,确定授课起点,做到承上启下、过渡自然、一如切题,新旧知识有机衔接,以确保学生的学习效果。

    【碎花黑板】手绘毕业答辩.zip

    尽管没有具体的标签信息,我们可以推测这个PPT可能包含以下几个方面的知识点: 1. **设计原则**:手绘风格的PPT设计通常遵循简洁、清晰和一致性原则,以确保信息传递的有效性。设计师可能运用色彩搭配、图形元素和...

    java培训课程-架构设计一般过程.pptx

    在Java培训课程中,架构设计一般过程主要包括以下几个步骤: 1. **需求分析**:这是设计过程的起点,需要理解系统的业务目标、用户需求以及预期的功能特性。需求分析帮助我们明确系统边界,识别关键功能,并确定...

    精美背景PPT模板下载

    在使用PPT模板时,有以下几个关键知识点: 1. **匹配主题**:选择与演示内容主题相符的模板。例如,如果是一个商务报告,应选择更正式、专业的模板;如果是儿童教育,可能需要选择色彩鲜艳、生动活泼的设计。 2. *...

    电子功用-永磁同步电机弱磁控制方法及装置

    在永磁同步电机的弱磁控制过程中,有以下几个关键知识点: 1. **磁链模型**:理解电机的磁链与电流的关系,建立准确的数学模型,这是设计弱磁控制策略的基础。通常采用基于磁链的磁链-电流(flux-linkage-current)...

    基于MVC模式的J2ME应用程序框架设计

    1. **模型层(Model)**:负责数据的管理和业务逻辑,不直接与用户界面交互,而是通过控制器传递数据。 2. **视图层(View)**:根据模型的状态更新用户界面,只负责显示数据,不包含任何业务逻辑。 3. **控制器层...

    扁平化视觉感工作汇报ppt模板

    在使用这样的模板时,有几个关键知识点值得注意: 1. **设计原则**:扁平化设计遵循“少即是多”的原则,使用简单的形状、纯色和清晰的字体。这种设计风格有助于观众快速理解和吸收信息,避免复杂的视觉干扰。 2. ...

    上海市闵行区2020届高三上学期质量调研考试(一模)语文试题及参考答案.pdf

    综观整套试题,我们可以看到高中语文教学的几个关键目标:首先,是夯实学生的语文基础,让学生掌握丰富的语文知识和基本技能;其次,是提高学生的阅读理解和分析能力,促进他们的思维深度和广度;再次,是培育学生的...

    从考研辅导看应用型本科化工原理的教学改革.docx

    基于此,教师在教学过程中可以通过以下几个方面来提升教学质量: - **强化重要公式的推导与应用**:引导学生理解重要公式背后的逻辑推理过程,加深对公式的理解和记忆,从而提高解题速度和准确性。 - **结合实际...

    mfcc:根据浏览器中的麦克风输入计算MFCC(梅尔频率倒谱系数)。 (TypeScript)

    7. **截断或阈值处理**:为了减少计算复杂性,通常只保留前几个MFCC系数。 TypeScript的使用使得代码更易于理解和维护,同时增加了编译时的错误检查。此外,由于TypeScript编译成JavaScript,因此这个项目仍然可以...

Global site tag (gtag.js) - Google Analytics