雪千渔Blog

  • 首页
  • 写写代码
    • dotNet
    • C++
    • Lua
    • Visual Basic
    • Java
    • Android
    • Web
  • DCC
    • Maya
    • Maya-Plug
    • AfterEffect
    • AfterEffect-Plug
    • PhotoShop-Plug
  • 游戏制作
    • Unity3D
    • UnrealEngine
    • 经验杂谈
    • 游戏设计
    • 自研引擎
    • 效果实现
  • 其他
    • 乱七八糟
    • 软件工具
    • 留言板
    • 自制素材
    • 关于我
雪千渔blog
唯有热爱,能抵漫长岁月
  1. 首页
  2. Coding
  3. C++
  4. 正文

C++元编程之判断是否为共享指针模板

2022年6月27日 363点热度 0人点赞 0条评论

最近有个要判断共享指针模板类型的需求,为此编写了该代码,之前没有说过空类型的用法,借此例子来说一下:

在主模板的声明中,允许使用一个默认的空类型,即typename = void,在偏特化模板的版本中使用了std::void_t<>这个模板,std::void_t<>这个类型的原型为

template <class... _Types>
using void_t = void;

唯一的作用就是辅助编译器进行SFINAE匹配。在std::shared_ptr中存在着一个element_type的类型,如果存在该类型就匹配偏特化版本,否则匹配主模板。

在偏特化版本中使用std::is_same这个判断两个类型是否相等的工具,使用传入的模板类型T,与该类型内的元素类型作为shared_ptr参数的类型进行判断。

template<typename T, typename = void>
struct is_shared_ptr
{
    constexpr inline static bool value = false;
};
template<typename T>
struct is_shared_ptr<T, std::void_t<typename T::element_type>>
{
    constexpr inline static bool value = std::is_same<T, std::shared_ptr<typename T::element_type>>::value;
};

除此之外还编写了移除模板类型的函数

template<typename T, typename = void>
struct remove_shared_ptr
{
    using type = T;
};
template<typename T>
struct remove_shared_ptr<T, std::void_t<typename T::element_type>>
{
    using type = T::element_type;
};

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: cpp 元编程
最后更新:2022年6月28日

JomiXedYu

IndieGame Developer & Netease Games TechArt

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

JomiXedYu

IndieGame Developer & Netease Games TechArt

最新 热点 随机
最新 热点 随机
UE材质Custom节点与HLSL的HACK操作 UE5出现D3D12崩溃报错解决方案 游戏引擎脚本绑定的三种写法与利弊 一种解决不支持中文与空格文件名的编码 Vulkan坐标系通用方案以及反转viewport UE编辑器开发之蓝图篇
一种解决不支持中文与空格文件名的编码游戏引擎脚本绑定的三种写法与利弊UE5出现D3D12崩溃报错解决方案UE材质Custom节点与HLSL的HACK操作
UnityEditor开发之修改脚本Gizmos存放路径 在Unity中多个脚本的Awake、OnEnable的执行顺序问题。 游戏引擎脚本绑定的三种写法与利弊 Unity资源打包经验概述 Maya崩溃文件查看器实用小工具发布 xLua无法判断Unity对象为nil的问题
友情链接
  • DorinXL
  • 小博博客
  • 秋橘斋

COPYRIGHT © 2014-2023 雪千渔Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

辽ICP备20006894号-1