栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++低级强制类型转换

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++低级强制类型转换

C++低级强制类型转换

C++的四种基本的类型转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)都存在类型检查,无法直接将一种类型转换成另一种类型。最近在了解一些C++底层实现的时候,需要输出C++函数指针,但是在用qDebug()(我是Qt程序员)输出的时候被当成逻辑类型输出了。这就需要转换一下类型才能正确输出,但是用C++原本的类型转换是做不到无限制转换的,都需要类型检查。
暂不清楚C++的其它库是否提供了这种低级的无检查的类型转换方法,所以为了能够正常输出成员函数指针,我做了如下的低级强制类型转换方法。

低级强制类型转换

定义一个函数模板,接收两个模板形参。一个是目标类型,一个是原始类型。
直接转换肯定是搞不定的,但是指针为我们提供了可乘之机。先对原数据取地址,通过reinterpret_cast将它转换成目标类型指针,最后解引用就得到目标类型数据了。

template
inline T lowlevel_cast(S &&src) {
    return *reinterpret_cast(&src);
}
用法

我是Qt程序员,所以例子也是Qt的。

    struct Func {void *func; long delta;};
    Func f = lowlevel_cast(&QObject::objectName);

你可能看出来了,我在思考为什么C++成员函数指针长度会是一般指针长度(处理器位长)的两倍。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号