move std 函数 示例_std::enable_if
时间: 2023-06-28 15:11:14 浏览: 108
`std::enable_if` 是 C++11 标准库中的一个模板元编程工具,用于在编译期根据某个条件来选择是否启用某个函数。它通常与函数模板一起使用,用于对函数模板进行条件限定。当条件满足时,函数模板才能被实例化。
`std::enable_if` 的基本语法如下:
```c++
template<bool B, class T = void>
struct enable_if {};
template<class T>
struct enable_if<true, T> {
typedef T type;
};
```
其中第一个模板定义了一个空类型 `enable_if`,它有两个模板参数:一个布尔类型 `B` 和一个任意类型 `T`,默认为 `void`。第二个模板是一个特化模板,当 `B` 为 `true` 时,它定义了一个名为 `type` 的 `T` 类型别名。
下面是一个使用 `std::enable_if` 的示例:
```c++
#include <iostream>
#include <type_traits>
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
add(T a, T b) {
return a + b;
}
int main() {
std::cout << add(1, 2) << std::endl; // 输出 3
// std::cout << add(1.0, 2.0) << std::endl; // 编译错误,因为 double 不是整数类型
return 0;
}
```
在这个示例中,`add` 函数使用了 `std::enable_if` 进行条件限定,只有当模板参数 `T` 是整数类型时,才能被实例化。当 `T` 是整数类型时,返回类型是 `T`,否则编译器会报错。
需要注意的是,`std::enable_if` 只是一个工具,它并不会在运行时对代码进行任何操作。它只是在编译期根据某个条件来决定是否启用某个函数模板。因此,它只能用于编译期的条件判断,不能用于运行时的条件判断。
阅读全文