在C++中,enable_if通常用于SFINAE(Substitution Failure Is Not An Error)技術,以在編譯時選擇性地啟用或禁用模板的實例化。配合Lambda表達式使用enable_if時,可以通過enable_if條件來選擇性地編譯Lambda表達式。
下面是一個示例代碼,演示了如何使用enable_if和Lambda表達式結合在編譯時選擇性地啟用Lambda表達式:
#include <iostream>
#include <type_traits>
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
add(T a, T b) {
return a + b;
}
int main() {
int x = 10, y = 20;
auto lambda = [&]() -> typename std::enable_if<std::is_integral<decltype(x)>::value, int>::type {
return x + y;
};
std::cout << "Result of add function: " << add(x, y) << std::endl;
std::cout << "Result of lambda expression: " << lambda() << std::endl;
return 0;
}
在上面的示例中,add函數使用enable_if來限制只有在T為整數類型時才實例化。而Lambda表達式使用enable_if來限制只有在x和y均為整數類型時才調用Lambda表達式。
通過此示例,您可以看到如何使用enable_if和Lambda表達式結合在編譯時選擇性地啟用Lambda表達式。希望對您有所幫助。