咨询:GCC STL是否提供从typedef别名获取原始类型的特性?
GCC STL中不存在从typedef别名获取“原始类型”的特性
首先直接给结论:GCC的STL(或者说整个C++标准库)都没有提供你想要的std::get_primitive这类元函数,而且从C++的类型系统设计来说,这类函数根本不可能存在。
原因很简单:typedef只是类型的别名,不是新的类型。在编译期,ivar和int是完全等价的,signIvar和ivar(也就是int)也是完全等价的——编译器不会保留“signIvar是从ivartypedef来的,ivar又是从inttypedef来的”这类层级信息。
你可以试试直接写:
std::cout << std::is_same<int, signIvar>::value;
它会输出true,因为对编译器来说这俩就是同一个类型,不存在“原始类型”和“别名类型”的区别。
你提到“理论上可实现但会增加编译时间开销”,但实际上这在原生C++typedef的场景下是做不到的——因为typedef在编译过程中会被立即替换为原始类型,没有任何元数据能让编译器(或STL元函数)追溯这个别名链。只有当你自己实现了类型包装器(比如用模板或者自定义类来封装原始类型,而不是用typedef),你才能手动编写元函数来提取内部的原始类型,但这和原生typedef完全是两回事。
内容的提问来源于stack exchange,提问作者HolyFoxMan Dude
相关产品推荐
相关产品推荐

