面试题答案
一键面试#include <iostream>
#include <type_traits>
template <typename T, typename = std::enable_if_t<std::is_integral<T>::value && std::is_signed<T>::value && std::is_floating_point<T>::value == false>>
void processData(T data) {
if (data > 10) {
std::cout << "Processing integral data greater than 10: " << data << std::endl;
}
}
int main() {
processData(15);
// processData(5); // 不会实例化,因为不满足 data > 10
// processData(10.5); // 不会实例化,因为不是整数类型
return 0;
}
上述代码通过 std::enable_if
实现了只有当 T
是整数类型且数据值大于10时才实例化 processData
函数模板。std::enable_if
的第一个参数是一个条件,当条件为真时,第二个模板参数才会被推导,否则函数模板不会被实例化。
在 main
函数中,调用 processData(15)
会成功实例化并执行函数体,而 processData(5)
和 processData(10.5)
由于不满足条件不会实例化函数模板。