0
点赞
收藏
分享

微信扫一扫

C++ enable_if

目录

​​is_integral_v​​

​​is_same_v​​

​​enable_if​​

​​enable_if实现条件编译​​

is_integral_v

is_integral_v判断一个类型是不是整型

is_same_v

is_same_v判断两个类型是不是相同的类型

enable_if

enable_if就是通过模板偏特化实现重载,从而用来控制参数类型。

自定义版本:

template<typename T, bool flag>
struct enable {
//
};
template<typename T>
struct enable<T, true> {
typedef T type;
};

template<typename T>
typename enable < string, is_integral_v<T>>::type ToString(T t)
{
return to_string(t);
}

int main()
{
cout << ToString(123);
//cout << ToString("123"); //编译失败
return 0;
}

ToString函数只接受整数类型的参数,否则会编译报错type。

使用库的版本:

template<typename T>
typename enable_if<is_integral_v<T>, string>::type ToString(T t)
{
return to_string(t);
}

int main()
{
cout << ToString(123);
//cout << ToString("123"); //编译失败
return 0;
}

enable_if实现条件编译

template<typename T>
typename enable_if<is_same_v<T, string>, string>::type ToString(T t)
{
return t;
}
template<typename T>
typename enable_if<!is_same_v<T, string>, string>::type ToString(T t)
{
return to_string(t);
}

int main()
{
cout << ToString(1234567890);
cout << ToString(string("123"));
return 0;
}

这个代码实现了,如果是string类型的参数就直接返回,否则就调用to_string函数再返回。


举报

相关推荐

0 条评论