move std 函数 示例_std::enable_if
时间: 2023-07-05 08:24:12 浏览: 85
可以使用 std::enable_if 来实现函数重载,仅当某些条件为真时才启用重载函数。
以下是一个示例,演示了如何在函数模板中使用 std::enable_if:
```c++
#include <iostream>
#include <type_traits>
template <typename T>
typename std::enable_if<std::is_integral<T>::value, bool>::type
is_odd(T i) {
return bool(i % 2);
}
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, bool>::type
is_odd(T i) {
return bool(std::fmod(i, 2.0));
}
int main() {
int i = 5;
float f = 5.5;
std::cout << std::boolalpha;
std::cout << is_odd(i) << std::endl;
std::cout << is_odd(f) << std::endl;
return 0;
}
```
在上面的示例中,我们定义了两个函数模板 is_odd,一个用于整数类型,另一个用于浮点类型。我们使用 std::enable_if 条件来启用适当的函数模板。
注意,我们在函数模板的返回类型中使用了 typename std::enable_if<...>::type。这是必需的,因为 std::enable_if 在不同的情况下返回不同的类型,而 typename 关键字用于告诉编译器,std::enable_if<...>::type 是一个类型,而不是一个静态成员变量或函数。