Bir şablon fonksiyonundaki diğer lambdaslardan boş (kaptasız) lambdasları tanımlamanın bir yolunu arıyorum. Şu anda C ++ 17 kullanıyorum ama C ++ 20 cevaplarını da merak ediyorum.
Kodum şöyle görünüyor:
template<typename T>
auto func(T lambda) {
// The aguments of the lambdas are unknown
if constexpr (/* is captureless */) {
// do stuff
}
}
C ++ standardı (17 veya 20) tarafından, bir fonksiyon göstergesine dönüştürülebilen, yakalanmamış bir lambda'nın da std::is_empty
verimi doğrulayacağı garanti ediliyor mu?
Bu kodu örnek olarak alalım:
auto a = []{}; // captureless
auto b = [c = 'z']{}; // has captures
static_assert(sizeof(a) == sizeof(b)); // Both are the same size
static_assert(!std::is_empty_v<decltype(b)>); // It has a `c` member
static_assert(std::is_empty_v<decltype(a)>); // Passes. It is guaranteed?
+
burada çalışıyor gibi görünüyor .
+lambda
) dönüştürmenin iyi biçimlendirilmiş olup olmadığını kontrol etmek için SFINAE kullanabilirsiniz .