C++ 11知识点:std::is_convertible
简介
is_convertible用于判断是否可以转换:第一个模板参数的类型是否可以转换为第一个模板参数的类型。
如果To, From都是基本类型,那么可以隐式转换。
如果To是基类,From是子类,那么From可以转换为To。
class template 声明
template<typename From, typename To>
struct is_convertible;
is_convertible 继承自integral_constant,如果能转换,可以从is_convertible<>::value萃取到true;如果不能转换,则萃取到false。
示例
A是B基类,B可以转换为A,反之不行。
// is_convertible example#include <iostream>#include <type_traits>
struct A { };
struct B : A { };
int main() {
std::cout << std::boolalpha; /* 输出流将bool输出true/false, 而不是1/0 */
std::cout << "is_convertible:" << std::endl;
std::cout << "int => float: " << std::is_convertible<int,float>::value << std::endl;
std::cout << "int = >const int: " << std::is_convertible<int,const int>::value << std::endl;
std::cout << "A => B: " << std::is_convertible<A,B>::value << std::endl; /* A不能转换为B */
std::cout << "B => A: " << std::is_convertible<B,A>::value << std::endl; /* B能转换为A */
return 0;
}
输出
is_convertible:
int => float: true
int => const int: true
A => B: false
B => A: true
参考
http://www.cplusplus.com/reference/type_traits/is_convertible