本文主要是介绍std::enable_if 和enable_if_t 搭配 is_same编译时期类型检查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
class AT{
public:void PrintT(){std::cout << "PrintT" << std::endl;}int ati;
};int main() {std::enable_if_t<std::is_class<AT>::value,AT> ati; // 获取AT类 c++ 14// 或者// std::enable_if<std::is_class<AT>::value,AT>::type ati; // c++ 11ati.PrintT();
}
具体的使用enable_if 做模版函数的编译时期的判断:
https://blog.csdn.net/jeffasd/article/details/84667090
https://www.jianshu.com/p/a961c35910d2
模版实例化代码:
typename std::enable_if<true, int>::type t; //正确
typename std::enable_if<true>::type; //可以通过编译,没有实际用处,推导的模板是偏特化版本,第一模板参数是true,第二模板参数是通常版本中定义的默认类型即void
typename std::enable_if<false>::type; //无法通过编译,type类型没有定义
typename std::enable_if<false, int>::type t2; //同上
typename std::enable_if::type; //无法通过编译,type类型没有定义
可以用在类型检查上面。
template <typename Sequence, typename = typename std::enable_if<std::is_same<Sequence, int>::value >::type >
enable_if and is_same
class Object {
public:bool to_string() {return true;}
};bool ChangeToString(Object* o) {return o->to_string();
}
#define DEF_IS(check_type, return_type) \template<class T> \typename std::enable_if<std::is_same<T, check_type>::value, return_type>::type// string
DEF_IS(std::string, bool) is_type(Object* obj) {return ChangeToString(obj);
}
这篇关于std::enable_if 和enable_if_t 搭配 is_same编译时期类型检查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!