2 && LOOP using namespa-6ren">
gpt4 book ai didi

c++ - 如何在无捕获的 lambda 中初始化一个范围内的项目,C++

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:57 25 4
gpt4 key购买 nike

我的代码如下。这行得通,它允许我在我的 lambda 中只有一个范围。

所以我想我的问题是,如何在不使用

的情况下获得相同的结果
"if(LOOP > 2 && LOOP < 5){int THERANGEVALUE = 2; FUNC[THERANGEVALUE]();}"?

而是将我的无捕获 lambda 中的项目初始化为已排列。又名,item_2 是 item_range(2,4)。然后还能够正常继续我的 lambda,而 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;
}

除此之外,以下是我在询问 friend 后得出的解决方案。令我惊讶的是,它实际上比我预期的要简单得多。虽然我无法轻松地将 lambda 中的每个项目初始化为一个范围,但我可以将其传递到一个数组中并在数组内部设置一个范围。因此,虽然它不是我想要的,但它......对我的目的来说已经足够好了。如果你看到这个,谢谢 Jaime。否则我会在下面使用 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;
}

最佳答案

我只看路:
要么扩展你的函数数组 -> 在下一个例子中就是 FUNC1
更改 operator [] 中给定的值 -> 下一个示例中的 FUNC2

#include <iostream>
#include <vector>
using namespace std;

std::vector<void (*)(void)> init_FUNC()
{
std::vector<void (*)(void)> func(5, [](){cout<<"z";});
func[0]=[](){ cout << "x" << endl;};
func[1]=[](){ cout << "y" << endl;};
return func;
}

std::vector<void (*)(void)> FUNC1= init_FUNC();

class FUNC_MAP
{
void (*_FUNC[3])(void) = { //captureless lambda.
/*ITEM_0*/[](){ cout << "x" << endl;},
/*ITEM_1*/[](){cout << "y" << endl;},
/*ITEM_2->ITEM_4*/[](){cout<<"z";}
};
typedef void (*FUNC_MAP_OUT)(void);

public:
FUNC_MAP_OUT operator[](int i)
{
if(i>2 && i<5)
{return _FUNC[2];}
else
{return _FUNC[i];}
}
};


FUNC_MAP FUNC2;

/*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 = 1;
int main()
{
FUNC1[LOOP]();
FUNC2[LOOP]();
return 0;
}

关于c++ - 如何在无捕获的 lambda 中初始化一个范围内的项目,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55175531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com