如何不使用定义结构的情况下使用结构
来源:互联网 发布:大数据未来就业前景 编辑:程序博客网 时间:2024/05/23 00:05
今天遇到这样一个问题:
在程序中定义了一个回调函数。它可以对数据中的所有CRect进行操作
typedef void(UserOperator)( void * , CRect );
OperatorRect( UserOperator pUserOper , void * pParam);
如果我要对所有的CRect进行某项操作时只须实现一个函数
MyOperator( void * pParam , CRect rect );
然后利用OperatorRect(MyOperator , pParam );
就可以实现对每一个CRect的操作,但是每一个类似MyOperator的函数都要得到不同类型的参数及返回值。
常规的解决方法:
定义一个结构(包含参数及返回值)。将结构的指针传递给MyOperator函数。
如:
Struct test
{
Int param1;
Int return1;
}
MyOperator( void * pParam , CRect rect )
{
Test * pTest = (Test *) pParam;
If(pTest ->param1 ==0)
If(pTest ->Return1<rect.width())
pTest ->Return1=rect.width();
Else if(pTest ->Return1<rect. height ())
pTest ->Return1=rect.height();
}
我所遇到的问题:
因为有许多的针对CRect的操作。它们传递的参数(pParam)都不同。所有我要定义数十个结构。而这些结构仅仅是为了传递一下参数再没有其它用处。其结果是导致我的程序看起来非常复杂。
解决方法:
结构无外乎是一块内存。只要我有与我的结构相同长度的内存块,那么我就可以把它当作我想要的结构来使用了。
示例:
//传递参数
Char pParam[sizeof(int),size(int)];
Int * pInt = (int * )pParam;
* pInt = 0;
OperatorRect(MyOperator , pParam );
pParam += size(int);
Int maxRect = * (int*)pParam;
//使用参数
MyOperator( void * pParam , CRect rect )
{
char * pchar = (char *) pParam;
int param1 = *(int * )pchar;
pchar += sizeof(int);
int * return1 = (int * )pchar;
If(param1 ==0)
If(*Return1<rect.width())
*Return1=rect.width();
Else if(*Return1<rect. height ())
*Return1=rect.height();
}
问题解决。
- 如何不使用定义结构的情况下使用结构
- 对于已经存在的项目,如何在不改变原来目录结构的情况下,使用maven
- 大部分情况下不应该直接使用协议中的结构
- 结构的定义与使用
- 结构的定义和使用
- 如何在不装ORACLE的情况下使用PLSQL
- 结构体的定义以及使用
- DELPHI结构体的定义和使用
- 结构体的定义及使用
- 结构体指针的定义和使用
- 结构体的定义以及使用
- 结构体的定义以及使用
- 结构体的定义以及使用
- jmp_buf的使用,结构定义为数组
- 使用typedef定义结构体的问题
- 结构体的定义以及使用
- 【基础】结构体的定义以及使用
- 不联网的情况下使用maven
- url
- 简单Dom手册
- 在Windows2003中安装sp2补丁失败
- 用iptables实现包过虑型防火墙
- SQL模糊查询
- 如何不使用定义结构的情况下使用结构
- 今天的问题(20070622)
- Visual Studio Setup Project 中如何管理 安装所需的预备条件
- ASP.NET下如何防范SQL注入式攻击
- websphere JDBCの設定
- 使用异步 I/O (AIO)大大提高应用程序的性能
- 常用算法设计方法
- 论语别裁:学而第一 作者:南怀瑾
- 如何修改可执行文件的图标