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

湖南省建设厅安许审核公布网站长岭建设局网站

湖南省建设厅安许审核公布网站,长岭建设局网站,标书制作教程全过程,品牌网网站建设公司结构体是否包含特定类型的成员变量 在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/831978/

相关文章:

  • 网站开发架构文档新浪网页版
  • 个人网站的服务器环境安装南京模板做网站
  • 简述常用的网站开发软件手机画画软件app
  • 网站目录怎么做外链前端开发和后端开发哪个好些
  • 企业标准网上备案网站怎么在濮阳网站做宣传
  • 浏览不良网站会被网警抓吗seo网络营销策略
  • 个人域名的网站做网站空间哪个好
  • 旅游网站怎样做宣传官方网站建设报价
  • 网站建设注意那物流公司排名前十
  • 高明网站建设公司营销型网站建设找哪家
  • 哪些网站开发做网站制作公司
  • 山东正元建设网站新氧网站头图怎么做的
  • 西湖专业网站设计公司如何建平台网站
  • 濮阳网站建设公司品牌注册商标流程及费用
  • 软件产品开发流程石家庄seo推广公司
  • python网站开发案例wordpress 免费 旅游
  • 南京房地产网站建设做私单的网站
  • 网站建设 资质商务网站建设管理思路
  • 台州企业网站设计西安市建设网站
  • 网站建设备案查询山东建设报网站
  • 湘西做网站工业软件开发技术专业
  • 电子商务网站模版ppt链接网站怎么做
  • 电子商务网站建设域名中国联通腾讯
  • 苏州做网站推广的公司律所网站方案
  • 专业的基础微网站开发个人网站命名 备案
  • 大良营销网站公司高安网站设计
  • 一个数据库怎么做二个网站河北网站备案系统
  • 做网站工作图沈阳网站建设专家
  • 莱州网站定制网站建设厂家
  • 网站建设将来有什么发展石家庄网站建设浩森宇特