简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:理解std::enable_if_t,可以通过SFINAE (Substitution Failure Is Not An Error) 的特性来实现编译时条件判断。这样可以在模板参数满足一定条件时启用特定的函数或方法。
std::enable_if_t用于指定启用条件,如果条件不满足,那么对应的函数将被SFINAE机制排除在外,不参与重载解析。
2.应用实例
#include <iostream>
#include <type_traits>
// 模板函数,只在T是整型时才会被启用
template <typename T>
std::enable_if_t<std::is_integral<T>::value>
foo(T value) {
std::cout << "整型参数: " << value << std::endl;
}
// 模板函数,只在T是浮点型时才会被启用
template <typename T>
std::enable_if_t<std::is_floating_point<T>::value>
foo(T value) {
std::cout << "浮点型参数: " << value << std::endl;
}
// 测试函数
int main() {
foo(42); // 调用第一个模板函数
foo(3.14); // 调用第二个模板函数
// foo("hello"); // 这一行会导致编译错误,因为传递的参数类型不满足任何一个模板函数的启用条件
return 0;
}