当前位置: 首页 > news >正文

宁波seo网站排名优化太原快速排名

宁波seo网站排名优化,太原快速排名,昆山有做网站的公司吗,哪个浏览器看黄页最快夸克浏览器结构体是否包含特定类型的成员变量 在C中,可以使用模板元编程和类型特性(type traits)来判断一个结构体是否包含特定类型的成员变量。这通常通过std::is_member_object_pointer类型特性来实现,它可以用来检查给定的成员指针是否指…

结构体是否包含特定类型的成员变量

在C++中,可以使用模板元编程和类型特性(type traits)来判断一个结构体是否包含特定类型的成员变量。这通常通过std::is_member_object_pointer类型特性来实现,它可以用来检查给定的成员指针是否指向结构体中的成员。

#include <iostream>
#include <type_traits>struct S1 {int id = 0;
};struct S2 {int id = 0;std::string code;
};// 检查T类型是否包含名为'code'的std::string类型成员变量
template <typename T, typename = void>
struct has_code : std::false_type {};template <typename T>
struct has_code<T, std::void_t<decltype(T::code)>> : std::is_same<decltype(T::code), std::string> {};// 辅助变量模板
#if _HAS_CXX17
template <typename T>
inline constexpr bool has_code_v = has_code<T>::value;
#else
template <typename T>
constexpr bool has_code_v = has_code<T>::value;
#endifint main() {std::cout << std::boolalpha;std::cout << "S1 has code: "<< has_code_v<S1> << std::endl; // 输出: falsestd::cout << "S2 has code: " << has_code_v<S2> << std::endl; // 输出: truereturn 0;
}

在这个示例中:

  1. has_code是一个模板结构体,它使用SFINAE(Substitution Failure Is Not An Error)技术来检查类型T是否包含名为code的成员变量。
  2. std::void_t<decltype(T::code)>用于在T类型中存在名为code的成员时产生一个void类型,否则产生一个替换失败。
  3. std::is_same<decltype(T::code), std::string>用于检查code成员是否为std::string类型。
  4. has_code_v是一个变量模板,它提供了一个方便的方式来直接访问has_code<T>::value的值。
  5. has_code 模板结构体的定义
  • 主模板 template<typename T, typename = void> struct has_code : std::false_type {};:这是一个通用的模板定义,当没有针对特定类型 T 的特化版本被匹配时,它将被使用。这里默认继承自 std::false_type,表示假设类型 T 不包含名为 codestd::string 类型成员变量。
  • 特化模板 template<typename T> struct has_code<T, std::void_t<decltype(T::code)>> : std::is_same<decltype(T::code), std::string> {};:这个特化版本仅在 T 中存在名为 code 的成员变量时才会被匹配。
  • std::void_t<decltype(T::code)> 是一个巧妙的技巧,它使用 decltype(T::code) 来获取 Tcode 成员的类型,如果 T 中不存在 code 成员,decltype(T::code) 会导致替换失败(这是 C++ 模板替换失败不是错误原则的应用),从而这个特化版本不会被匹配,而是使用主模板。如果 T 中存在 code 成员,std::void_t<decltype(T::code)> 会被替换为 void,特化版本就会被匹配,然后通过 std::is_same<decltype(T::code), std::string> 来进一步检查 code 成员的类型是否为 std::string

这种方法可以扩展到检查任何类型的成员变量,只需将std::string替换为你需要检查的类型即可。

http://www.yayakq.cn/news/424647/

相关文章:

  • 河北省建设招标网站机械加工网名大全
  • 安庆市住房和建设厅网站首页制作网站培训学校
  • 深圳建设局官网站什么是营销型手机网站建设
  • 临沧网站建设ynyuewordpress 有什么用
  • 做购物网站写数据库的流程aws如何搭建wordpress
  • 网站排名 影响因素网站防红怎么做的
  • 未备案个人网站 如何挣钱个人网页设计图片大全
  • 成都企业建站公司在线咨询做网站建设工资多少
  • 免费的网站建造wordpress 文章去重
  • 企石镇网站仿做服务器搭建网站跑不满宽带
  • 网站建设分金手指专业十三宝安中心医院入职体检
  • 北京建站公司兴田德润信任省建设厅网站物业管理
  • 亚马逊网站建设进度计划书dede 网站地图 调用文章
  • 网站程序上传网站升级维护要多久
  • 徐州公司建站模板网站 开发合同
  • 滁州市建设工程质量检测协会网站佛山市南海区交通建设网站
  • 有免费的网站建设垦利区建设局网站
  • 做景观要用的植物网站什么网站可以学习建设工程法律实践
  • 自己做网站如何赚钱吗网站建设需要几个部门
  • 网站开发什么语言安全装修门面一般找谁
  • 宁波自己建网站wordpress评论模块
  • 建手机网站教程配件网站模板
  • 链家网站谁做的洞口网站开发公司
  • 为公司制作网站优秀网站网址
  • ps怎么做网站首页厦门高端网站案例
  • 国外服务器做网站保定网站推广公司
  • 为什么网站打不开网站建设 交单流程
  • 互站网源码商城莱芜网络推广公司哪里找
  • 做阿里国际网站多少钱建设网站的好处和优点
  • 网站建设的客户都在哪里wordpress管理员 404