指针类型的转换,难题

sunlightbj 2007-10-25 04:05:24

现在要做一个指针类型转换,把void* a 变成CDMClass*

原来写的是(CDMClass*)a,未能通过公司的编码规则自动检查器,违反了“不能用c语言风格cast”这一条;

于是改成reinterpret_cast<CDMClass*>(a),又违反了“不允许使用reinterpret_cast”这一条;

大家还有什么招数能做指针类型的转换吗?static_cast不能用于指针转换,VS2003编译不通过
...全文
174 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyg_zy 2007-10-25
  • 打赏
  • 举报
回复
用 static_cast vs2003可以编译通过

void *pVoid = NULL;
CWnd *pInt = static_cast<CWnd *> ( pVoid);
  • 打赏
  • 举报
回复
void* a = new CDMClass;
CDMClass* p=0;
memcpy(&p,&a,sizeof(void*) );
jixingzhong 2007-10-25
  • 打赏
  • 举报
回复
static_cast 如果可以使用,
那么可以使用 static_cast 完成类型转换。

如果不可以使用,
那么,就无法使用 void * 操作了,
修改传递时候的类型为目标类型,或者是可以隐式转换到目标类型的某个类型。
  • 打赏
  • 举报
回复
不能用c语言风格cast
不允许使用reinterpret_cast
这两条已经足够限制你 不能用void*
这种类型到任何类型都得需要一个强制转换

你可以试试看用boost::any
wjkgz 2007-10-25
  • 打赏
  • 举报
回复
看看能不能不用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 );


根原来一个意思,换个方式
jixingzhong 2007-10-25
  • 打赏
  • 举报
回复
void *, 要使用只能是强制转换,但是,你这里居然禁止强制转换 ....

那么就不要使用 void * 了吧,
之前传递的时候就使用合适的类型,
避免显式的转换,可以考虑隐式完成转换。
jixingzhong 2007-10-25
  • 打赏
  • 举报
回复
不能用c语言风格cast
不允许使用reinterpret_cast

...
guo_wei 2007-10-25
  • 打赏
  • 举报
回复
(CDMClass*)(a);
这样试试

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧