Мой код ниже.Это работает, это позволяет мне иметь ровно один диапазон в моей лямбде.
Так что я думаю, что мой вопрос заключается в том, как добиться тех же результатов, не используя
"if(LOOP > 2 && LOOP < 5){int THERANGEVALUE = 2; FUNC[THERANGEVALUE]();}"?
И вместоинициализируйте предмет в моей безвоздушной лямбде как находящийся на расстоянии.иначе, item_2 является item_range (2,4).И затем также возможность продолжить мою лямбду в обычном режиме, тогда как Item_3 будет равно item_5
Заранее благодарю за любую помощь, я с радостью добавлю дополнительные материалы, если потребуется.
#include <iostream>
using namespace std;
void (*FUNC[3])(void) = { //captureless lambda.
/*ITEM_0*/[](){ cout << "x" << endl;},
/*ITEM_1*/[](){cout << "y" << endl;},
/*ITEM_2->ITEM_4*/[](){cout<<"z";}
};
/*Here the [](){code;} lambda is acting as a stand-in for void FUNC() so it shouldn't touch anything outside of its scope*/
int LOOP = 4;
int main()
{
if(LOOP > 2 && LOOP < 5){int THERANGEVALUE = 2; FUNC[THERANGEVALUE]();}
FUNC[LOOP]();
return 0;
}
В дополнение к этому ниже приводится решение, которое я пришел после того, как спросил друга.К моему удивлению, все оказалось намного проще, чем я ожидалХотя я не мог легко инициализировать каждый элемент в лямбда-диапазоне, я мог передать его в массив и установить диапазон внутри массива.Так что, хотя это не совсем то, что я искал, это ... достаточно хорошо для моих целей.Спасибо, Хайме, если увидишь это.В противном случае я бы воспользовался ответом PilouPili ниже.
#include <iostream>
using namespace std;
void (*FUNC[4])(void) = { //captureless lambda.
/*ITEM_0*/ [](){ cout << "x" << endl;},
/*ITEM_1*/ [](){cout << "y" << endl;},
/*ITEM_2->ITEM_4*/[](){cout<<"z";},
/*ITEM_5*/ [](){cout<<"z";}
};
int LOOP = 4;
int main()
{
int ARR[5]={};
for(int I = 0; I < 6;I=I+1){//handling of ranged values.
if(I>2 && I<5){ARR[I]=2;} else {ARR[I]=I;}
}
FUNC[ARR[LOOP]]();
return 0;
}