এখানে একটি সমাধান যা কাঠামোর মধ্যে লাম্বা জড়িত জড়িত:
template <typename T>
struct LamT
{
static void Go()
{
auto lam = []()
{
T var;
std::cout << "lam, type = " << typeid(var).name() << std::endl;
};
lam();
}
};
ব্যবহার করতে:
LamT<int>::Go();
LamT<char>::Go();
#This prints
lam, type = i
lam, type = c
এটির সাথে প্রধান সমস্যা (অতিরিক্ত টাইপিংয়ের পাশাপাশি) আপনি অন্য কাঠামোর মধ্যে এই কাঠামোর সংজ্ঞা এম্বেড করতে পারবেন না বা পাবেন (জিসিসি 4.9)
error: a template declaration cannot appear at block scope
আমি এটি করার চেষ্টাও করেছি:
template <typename T> using LamdaT = decltype(
[](void)
{
std::cout << "LambT type = " << typeid(T).name() << std::endl;
});
আশা করি যে আমি এটি এর মতো ব্যবহার করতে পারি:
LamdaT<int>();
LamdaT<char>();
তবে আমি সংকলক ত্রুটি পেয়েছি:
error: lambda-expression in unevaluated context
সুতরাং এটি কাজ করে না ... তবে এটি সংকলন করলেও এটি সীমিতভাবে ব্যবহারযোগ্য হবে কারণ আমাদের এখনও ফাইল স্কোপে "ল্যামডেট ব্যবহার" করতে হবে (কারণ এটি একটি টেমপ্লেট) যা ধরণের উদ্দেশ্যকে পরাস্ত করে? lambdas।