cpp11的 std::enable_if和std::is_same等类型判定函数
时间: 2023-05-31 22:03:30 浏览: 90
std::enable_if是一个类型判定函数,用于在编译时根据类型是否满足特定条件来选择函数重载。例如,可以使用std::enable_if来禁用某些函数模板,以确保它们只能用于特定类型。
std::is_same也是一个类型判定函数,用于判断两个类型是否相同。例如,可以使用std::is_same来检查模板参数类型是否与期望的类型相同,以确保模板实例化时传递的参数类型正确。
示例代码:
```c++
#include <type_traits>
template<typename T, typename S>
typename std::enable_if<std::is_same<T, S>::value, void>::type foo(T t, S s)
{
// 在T和S类型相同的情况下执行的代码
}
template<typename T, typename S>
typename std::enable_if<!std::is_same<T, S>::value, void>::type foo(T t, S s)
{
// 在T和S类型不相同时执行的代码
}
int main()
{
int i = 1;
long l = 2;
foo(i, i); // 调用第一个foo函数
foo(i, l); // 调用第二个foo函数
}
```
在上面的例子中,如果T和S类型相同,则调用第一个foo函数,否则调用第二个foo函数。这是通过std::enable_if和std::is_same的组合来实现的。