std::enable_if 最小示例
另请参见std::enable_if 和 std::is_floating_point 最小示例和std::enable_if 和 std::is_same 最小示例
假设你有一个模板函数:
enable_if_snippet.cpp
template<typename T>
T mySine(T arg) {
return sin(arg);
}现在你想仅在 T 是浮点数(即非整数!)时启用此函数。像这样使用 std::enable_if:
enable_if_example.cpp
template<typename T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr>
T mySineFloatingPointOnly(T arg) {
return sin(arg);
}完整示例:
enable_if_full_example.cpp
#include <iostream>
#include <type_traits>
#include <cmath>
using std::cout;
using std::endl;
template<typename T>
T mySine(T arg) {
return sin(arg);
}
template<typename T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr>
T mySineFloatingPointOnly(T arg) {
return sin(arg);
}
int main() {
cout << mySine(1.5) << endl;
// mySine(1) 将工作
// mySineFloatingPointOnly(1) 将无法编译
cout << mySineFloatingPointOnly(1.5) << endl;
}Check out similar posts by category:
C/C++
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow