现在要做一个指针类型转换,把void* a 变成CDMClass*原来写的是(CDMClass*)a,未能通过公司的编码规则自动检查器,违反了“不能用c语言风格cast”这一条;于是改成reinterpret_cast<CDMClass*>(a),又违反了“不允许使用reinterpret_cast”这一条;大家还有什么招数能做指针类型的转换吗?static_cast不能用于指针转换,VS2003编译不通过
现在要做一个指针类型转换,把void* a 变成CDMClass*原来写的是(CDMClass*)a,未能通过公司的编码规则自动检查器,违反了“不能用c语言风格cast”这一条;于是改成reinterpret_cast<CDMClass*>(a),又违反了“不允许使用reinterpret_cast”这一条;大家还有什么招数能做指针类型的转换吗?static_cast不能用于指针转换,VS2003编译不通过
不允许使用reinterpret_cast...
之前传递的时候就使用合适的类型,
避免显式的转换,可以考虑隐式完成转换。
但是如果返回void *的函数不是你们定义的,比如你们要是使用Com等,那必需要把void *转换为其它的类型的。不过,不知道这样些能不能通过你们公司的检查void ChangeType(void *oldType, void ** newType )
{
*newType = oldType;
}void * pOldPoint = your point;
CYourType * pNewPoint = NULL;
ChangeType( pOldPoint, (void**)&pNewPoint );根原来一个意思,换个方式
不允许使用reinterpret_cast
这两条已经足够限制你 不能用void*
这种类型到任何类型都得需要一个强制转换你可以试试看用boost::any
那么可以使用 static_cast 完成类型转换。 如果不可以使用,
那么,就无法使用 void * 操作了,
修改传递时候的类型为目标类型,或者是可以隐式转换到目标类型的某个类型。
CDMClass* p=0;
memcpy(&p,&a,sizeof(void*) );
CWnd *pInt = static_cast<CWnd *> ( pVoid);