如何不使用定义结构的情况下使用结构

来源:互联网 发布:大数据未来就业前景 编辑:程序博客网 时间:2024/05/23 00:05
今天遇到这样一个问题:
       在程序中定义了一个回调函数。它可以对数据中的所有CRect进行操作
typedef void(UserOperator)( void * , CRect );
              OperatorRect( UserOperator pUserOper , void * pParam);
              如果我要对所有的CRect进行某项操作时只须实现一个函数
              MyOperator( void * pParam , CRect rect );
             
              然后利用OperatorRectMyOperator , 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;
              OperatorRectMyOperator , 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();
}
问题解决。
 
原创粉丝点击