网站建设营销推广,单位做好接种第三针疫苗通知,做彩票网站电话多少,动易 网站文章enable_if和SFINAESFINAE是模板的一个特性#xff0c;也就是替换失败不报错。正常来说#xff0c;函数匹配的时候按照优先级依次匹配定义的重载函数#xff0c;最终选择最佳匹配的函数运行。模板也是一样的#xff0c;但是在替换模板时#xff0c;即使出现异常错误也不认为…enable_if和SFINAESFINAE是模板的一个特性也就是替换失败不报错。正常来说函数匹配的时候按照优先级依次匹配定义的重载函数最终选择最佳匹配的函数运行。模板也是一样的但是在替换模板时即使出现异常错误也不认为是错误而只是简单地pass掉。enable_if 是c的标准模板其实现非常简单这里我们给出其实现的一种方式templatebool B, class T void
struct enable_if {};templateclass T
struct enable_iftrue, T { typedef T type; };其作用在于当bool为true时enable_if会有一个type类型false时则没有。因此利用这种条件为真时有type条件为假时没有type。结合SFINAE特性可以更方便的给模板制造一点小错误让模板解析跳过当前模板。字节序转换templateclass T
typename std::enable_ifsizeof(T) sizeof(uint64_t), T::type
byteswap(T value) {return (T)bswap_64((uint64_t)value);
}/*** brief 4字节类型的字节序转化*/
templateclass T
typename std::enable_ifsizeof(T) sizeof(uint32_t), T::type
byteswap(T value) {return (T)bswap_32((uint32_t)value);
}/*** brief 2字节类型的字节序转化*/
templateclass T
typename std::enable_ifsizeof(T) sizeof(uint16_t), T::type
byteswap(T value) {return (T)bswap_16((uint16_t)value);
}
在匹配byteswap模板函数时返回值std::enable_ifsizeof(T) sizeof(uint64_t), T::type 会判断T的byte数是否等于8等于8时enable_if有type类型函数模板替换成功执行函数不等于8时没有enable_if没有type类型替换错误但是不会报错且跳过该模板继续向下匹配。参考:视频C新标准012enable_if博客C enable_if的使用_jeffasd的博客-CSDN博客_c enable_if