У меня проблема с лямбдами, и я хочу сохранить их в указателях, но создавать их без постоянных переменных.
// Example program
#include <iostream>
#include <string>
template<short n>
void speak(){
std::cout << "speak:[" << n << "]" << std::endl;
}
int main()
{
typedef void(*func)(void);
func ptr[8];
const short j = 10;
for(short i = 0; i < 4; i++){
ptr[i] = [=](void)->void{
std::cout << "lamda:[" << j << "]" << std::endl;
};
/*ptr[i] = [=](void)->void{
std::cout << "lamda:[" << i << "]" << std::endl;
};*/
ptr[i + 4] = speak<j>;
//ptr[i + 4] = speak<i>;
}
for(short i = 0; i < 8; i++){
ptr[i]();
}
return 0;
}
Можно определить лямбда с константой var "j", но не с «i». Есть ли способ сделать это с помощью i, поэтому в этом нет необходимости:
ptr[0] = [=](void)->void{
std::cout << "lamda:[" << 0 << "]" << std::endl;
};
ptr[1] = [=](void)->void{
std::cout << "lamda:[" << 1 << "]" << std::endl;
};
ptr[2] = [=](void)->void{
std::cout << "lamda:[" << 2 << "]" << std::endl;
};
ptr[3] = [=](void)->void{
std::cout << "lamda:[" << 3 << "]" << std::endl;
};
шаблонная функция была моей другой попыткой добиться этого, но безуспешно
при попытке использовать «i» получил: «ошибка: невозможно преобразовать 'main () :: 'to' fun c {aka void () ()} 'в назначении "*