Tôi đang tìm kiếm một cách để xác định lambdas trống (không bị giam giữ) từ các lambdas khác trong một hàm mẫu. Tôi hiện đang sử dụng C ++ 17 nhưng tôi cũng tò mò về câu trả lời của C ++ 20.
Mã của tôi trông như thế này:
template<typename T>
auto func(T lambda) {
// The aguments of the lambdas are unknown
if constexpr (/* is captureless */) {
// do stuff
}
}
Được đảm bảo bởi tiêu chuẩn C ++ (17 hoặc 20) rằng lambda không bị giam giữ, có thể chuyển đổi thành con trỏ hàm, cũng sẽ làm cho std::is_empty
năng suất đúng?
Lấy mã này làm ví dụ:
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?
+
dường như làm việc ở đây .
+lambda
) có được định dạng tốt hay không.