现在要做一个指针类型转换,把void* a 变成CDMClass*原来写的是(CDMClass*)a,未能通过公司的编码规则自动检查器,违反了“不能用c语言风格cast”这一条;于是改成reinterpret_cast<CDMClass*>(a),又违反了“不允许使用reinterpret_cast”这一条;大家还有什么招数能做指针类型的转换吗?static_cast不能用于指针转换,VS2003编译不通过

解决方案 »

  1.   

    不能用c语言风格cast
    不允许使用reinterpret_cast...
      

  2.   

    void *, 要使用只能是强制转换,但是,你这里居然禁止强制转换 ....那么就不要使用 void * 了吧,
    之前传递的时候就使用合适的类型,
    避免显式的转换,可以考虑隐式完成转换。
      

  3.   

    看看能不能不用void *,哪怕弄个什么基类的,也好用dynamic_cast
    但是如果返回void *的函数不是你们定义的,比如你们要是使用Com等,那必需要把void *转换为其它的类型的。不过,不知道这样些能不能通过你们公司的检查void ChangeType(void *oldType, void ** newType )
    {
        *newType = oldType;
    }void * pOldPoint = your point;
    CYourType * pNewPoint = NULL;
    ChangeType( pOldPoint, (void**)&pNewPoint );根原来一个意思,换个方式
      

  4.   

    不能用c语言风格cast
    不允许使用reinterpret_cast
    这两条已经足够限制你 不能用void*
    这种类型到任何类型都得需要一个强制转换你可以试试看用boost::any
      

  5.   

    static_cast 如果可以使用, 
    那么可以使用 static_cast 完成类型转换。 如果不可以使用, 
    那么,就无法使用 void * 操作了, 
    修改传递时候的类型为目标类型,或者是可以隐式转换到目标类型的某个类型。
      

  6.   

    void* a = new CDMClass;
    CDMClass* p=0;
    memcpy(&p,&a,sizeof(void*) );
      

  7.   

    用 static_cast vs2003可以编译通过void *pVoid = NULL;
    CWnd *pInt  = static_cast<CWnd *> ( pVoid);