আমি সি ++ ল্যাম্বডাস এবং ফাংশন পয়েন্টারে তাদের অন্তর্নিহিত রূপান্তর নিয়ে খেলছিলাম। আমার সূচনা উদাহরণটি এগুলি ftw ফাংশনের কলব্যাক হিসাবে ব্যবহার করছিল। এটি প্রত্যাশার মতো কাজ করে।
#include <ftw.h>
#include <iostream>
using namespace std;
int main()
{
auto callback = [](const char *fpath, const struct stat *sb,
int typeflag) -> int {
cout << fpath << endl;
return 0;
};
int ret = ftw("/etc", callback, 1);
return ret;
}
ক্যাপচারগুলি ব্যবহার করার জন্য এটি সংশোধন করার পরে:
int main()
{
vector<string> entries;
auto callback = [&](const char *fpath, const struct stat *sb,
int typeflag) -> int {
entries.push_back(fpath);
return 0;
};
int ret = ftw("/etc", callback, 1);
for (auto entry : entries ) {
cout << entry << endl;
}
return ret;
}
আমি সংকলক ত্রুটি পেয়েছি:
error: cannot convert ‘main()::<lambda(const char*, const stat*, int)>’ to ‘__ftw_func_t {aka int (*)(const char*, const stat*, int)}’ for argument ‘2’ to ‘int ftw(const char*, __ftw_func_t, int)’
কিছু পড়ার পরে। আমি শিখেছি ক্যাপচারগুলি ব্যবহার করে ল্যাম্বডাসকে স্পষ্টভাবে ফাংশন পয়েন্টারে রূপান্তর করা যায় না ।
এটির জন্য কি কোনও পরিকল্পনা রয়েছে? তারা "স্পষ্টভাবে" রূপান্তরিত হতে পারে না এই সত্যের অর্থ কি তারা "স্পষ্টভাবে" রূপান্তর করতে পারে? (আমি কাস্ট করার চেষ্টা করেছি, সাফল্য ছাড়াই)। কাজের উদাহরণটি সংশোধন করার একটি পরিষ্কার উপায় কী হবে যাতে আমি ল্যাম্বডাস ব্যবহার করে কোনও বস্তুতে প্রবেশের তালিকা যুক্ত করতে পারি ?.