move std 函数 示例_std::enable_if
时间: 2023-06-28 22:09:09 浏览: 53
`std::enable_if` 是 C++11 标准库中的一个类型萃取工具,可以用于根据某个条件选择是否启用某个函数模板。下面是一个使用 `std::enable_if` 的示例:
```c++
#include <iostream>
#include <type_traits>
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
my_abs(T x) {
return x < 0 ? -x : x;
}
int main() {
std::cout << my_abs(3) << std::endl; // 输出 3
std::cout << my_abs(-3) << std::endl; // 输出 3
//std::cout << my_abs("hello") << std::endl; // 编译错误,"hello" 不是整数类型
return 0;
}
```
这里定义了一个函数模板 `my_abs`,它的模板参数 `T` 可以是任意类型。但是,通过使用 `std::enable_if`,我们在模板参数列表中添加了一个额外的参数,用来控制 `my_abs` 是否启用。
在这个示例中,我们通过 `std::is_integral<T>::value` 判断模板参数 `T` 是否是整数类型。如果是整数类型,那么 `std::enable_if` 的第二个参数就是 `T`,返回值类型就是 `T`;否则,由于没有返回值类型,编译就会出错。
在 `main` 函数中,我们分别调用了 `my_abs(3)` 和 `my_abs(-3)`,它们都是整数类型,因此编译通过并输出了结果。而如果我们试图调用 `my_abs("hello")`,由于 "hello" 不是整数类型,编译就会出错。
阅读全文