Inilah salah satu solusi yang melibatkan membungkus lamba dalam suatu struktur:
template <typename T>
struct LamT
{
static void Go()
{
auto lam = []()
{
T var;
std::cout << "lam, type = " << typeid(var).name() << std::endl;
};
lam();
}
};
Untuk menggunakan lakukan:
LamT<int>::Go();
LamT<char>::Go();
#This prints
lam, type = i
lam, type = c
Masalah utama dengan ini (selain mengetik tambahan) Anda tidak dapat menanamkan definisi struktur ini di dalam metode lain atau Anda dapatkan (gcc 4.9)
error: a template declaration cannot appear at block scope
Saya juga mencoba melakukan ini:
template <typename T> using LamdaT = decltype(
[](void)
{
std::cout << "LambT type = " << typeid(T).name() << std::endl;
});
Dengan harapan saya bisa menggunakannya seperti ini:
LamdaT<int>();
LamdaT<char>();
Tapi saya mendapatkan kesalahan kompilator:
error: lambda-expression in unevaluated context
Jadi ini tidak bekerja ... tetapi bahkan jika itu mengkompilasi itu akan menjadi penggunaan terbatas karena kita masih harus meletakkan "menggunakan LamdaT" pada ruang lingkup file (karena itu adalah template) yang semacam mengalahkan tujuan dari lambda.