您的位置:首页 > 编程语言 > C语言/C++

C++中用struct来作为接口的传递参数

2008-10-17 21:24 197 查看
可能对很多C++程序员来说,本来这算不上什么很高深的东西。不过之于我来所说,还是第一次这样传递参数。
起因是我的一个模块有多个函数内部代码类似,技术牛人也是我的直接领导让我用函数模板。晃晃悠悠我用模板完成之后发给他复查。再要求我用结构体来处理每个不同函数的参数,并且对结构体成员赋值要放到构造函数中。我试着按他的思路作了后,发现果然每个接口内部的代码立刻变得简洁很多,而且也利于维护了。详细代码就不列举上来了,简单做个小例子说明一下:
/*! 处理一般类型数据传入 */
template<typename T>
static CDMPacket& operator<<(CDMPacket& packet, const T& t)
{
packet.Write(reinterpret_cast<BYTE*>(&t), sizeof(t));
return packet;
}

/** 内部处理函数模板 */
template<typename T>
void CmdDataFunction(const T& t)
{
CDMPacket packet;
packet << t;
}

/*! 重载处理functionsparam_s_type特殊类型数据传入 */
template<typename T>
static CDMPacket& operator<<(CDMPacket& packet, const functionsparam_s_type& t)
{
packet << t.m_dwParam1 << t.m_dwParam2;
return packet;
}
/*! 参数结构体 */
struct functionsparam_s_type
{
DWORD m_dwParam1;
DWORD m_dwParam2;
fileinfo_s_type(DWORD param1, DWORD param2)
:m_dwParam1(param1), m_dwParam2(param2) {}
};

/** 外部接口函数 */
void ParseFunction(DWORD inParam1, DWORD inParam2)
{
functionsparam_s_type t(inParam1, inParam2);
CmdDataFunction(t);
}

老实说,刚开始我觉得这种写法有些复杂,但是后来发现这种结构很精巧。我只能用精巧这个词。基本上,我只需要维护数据处理模板函数就可以了。就算要新增接口,也只用增加新的结构体,重载特殊类型数据的处理即可。从后期扩展和维护的角度来说,工作量确实减少了。从语法角度来说,并没有用到很复杂的东西,都是利用了C++语言比较常用的语法,但是却很精巧的搭建在一起提供了灵活的用法。看来记住语法,会用常规的结构只是简单的会C++。只有发现和练习比较巧妙的C++解决思路来处理问题,才是真正掌握C++。看来自己还有很长的路要走。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: