typedef struct S1
{
     int a;
     char[10] b;
     int c;
}S1;typedef struct S2
{
     int a;
     char[20] b;
     int c;
}S2;在函数中想根据iFlag来定义不同类型的结构变量,能实现吗?void xxx(int iFlag)
{
#if  iFlag==1 
    S1 s;
#else
    S2 s;
#endif....
}

解决方案 »

  1.   

    不行吧void   xxx(int   iFlag) 

        if( iFlag==1 )  
            S1   s; 
       else
            S2   s; 
    .... 
    }
    这样不行么?
      

  2.   

    struct S 
    {
      virtual int GetA() = 0;
      virtual char* GetB() = 0;
      virtual int GetC() = 0;
    };typedef   struct   S1 : public S

              int   a; 
              char[10]   b; 
              int   c; 
      int GetA() {return a;}
      char* GetB() {return b;}
      int GetC() {return c;}
    }S1; typedef   struct   S2 : public S

              int   a; 
              char[20]   b; 
              int   c; 
      int GetA() {return a;}
      char* GetB() {return b;}
      int GetC() {return c;}
    }S2; void xxx(int iFlag)
    {
      S* pS;
      if (iFlag==1)
        pS = new S1;
      else
        pS = new S2;  int aa = pS->GetA();
      char* bb = pS->GetB();
      int cc = pS->GetC();
    }
      

  3.   

    谢谢jameshooo 的详细解释,但是我下面的处理是这样的:{
            ....
    memcpy(&s,pBuf,sizeof(s));
            ....
    }需要载入一段数据到这个结构中,如果宏不能实现根据需要定义变量类型,那还有什么好方法呢?
      

  4.   

    class S{}
    class S1:public S
    {
              int   a;
              char[10]   b;
              int   c;
    }S1;class S2:public S
    {
              int   a;
              char[20]   b;
              int   c;
    }S2; 然后S*pS = NULL;
    int len=0;
    if   (iFlag==1)
    {
            pS   =   new   S1;
            len = sizeof(S1);
    }
    else
    {
            pS   =   new   S2; 
            len = sizeof(S2);
    }
    memcpy(pS,pBuf,len);
      

  5.   

    使用6楼jameshooo所用的多态方案或者模板函数都可以,搂主的设计以及对s的后续修改动作也需要因此做相应的变更,例如把memcpy那个放到s的某个虚成员函数中。
      

  6.   

    在eplanet 和 jameshooo 的启发下终于实现了预想的目标,散分