আমি একটি টেমপ্লেট ফাংশনে অন্যান্য ল্যাম্বডাস থেকে খালি (ক্যাপচারহীন) ল্যাম্বডাস সনাক্ত করার একটি উপায় অনুসন্ধান করছি। আমি বর্তমানে সি ++ 17 ব্যবহার করছি তবে আমি সি ++ ২০ টি উত্তরও জানতে আগ্রহী।
আমার কোডটি এর মতো দেখাচ্ছে:
template<typename T>
auto func(T lambda) {
// The aguments of the lambdas are unknown
if constexpr (/* is captureless */) {
// do stuff
}
}
এটি কি সি ++ স্ট্যান্ডার্ড (17 বা 20) দ্বারা গ্যারান্টিযুক্ত যে কোনও ক্যাপচারহীন ল্যাম্বদা, যা একটি ফাংশন পয়েন্টারে রূপান্তরযোগ্য, এছাড়াও std::is_empty
ফলন সত্য করে তুলবে ?
একটি উদাহরণ হিসাবে এই কোড নিন:
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?
+
এখানে কাজ মনে হচ্ছে ।
+lambda
) এর রূপান্তরটি সু-গঠিত কিনা তা পরীক্ষা করতে আপনি SFINAE ব্যবহার করতে পারেন ।