如何将此C#foreach代码转换为C++?
问题描述:
我正在用C++在visual studio窗体上制作tic tac toe游戏。 如何将此C#代码转换为C++代码?如何将此C#foreach代码转换为C++?
private Void disableButtons()
{
try
{
foreach (Control c in Controls)
{
Button b = (Button)c;
b.Enabled = false;
}
}
catch{ }
}
答
你不能把它转换成纯C++代码,而无需使用具有类控制和按钮与具有“已启用”公共成员Button类的任何额外的库。 但是,您可以将其转换为C++/CLI代码,您可以在其中混用纯粹的C++代码。
private Void disableButtons()
{
try
{
for each (Control^ c in Controls)
{
Button^ b = (Button^)c;
b->Enabled = false;
}
}
catch{ }
}
答
下面是关于如何使用C#的foreach
在C++中的例子:
#include <iostream>
int main()
{
const int SIZE = 3;
int myArray[SIZE] = { 1, 2, 3 };
for (int & i : myArray) // make sure to put the &
{
i = i + 10;
}
for (int i = 0; i < SIZE; i++)
{
std::cout << myArray[i] << std::endl;
}
return 0;
}
的语法应该是这样的:
for(type name : collection) { // your code here }
,你可以把&类型之间和名称如果你想改变原来的元素
for(type & name : collection) { // your code here }
答
你已经标记了这个Visual C++,所以我假设你正在使用MFC。如果你使用Qt或wxWidgets或其他的东西,答案会不一样。
如果你已经有了控件的ID在一个容器,要为-旺火上,则:
UINT Controls[] = { IDC_BUTTON1, IDC_BUTTON2, IDC_BUTTON3, IDC_BUTTON4, IDC_BUTTON5 };
for (UINT c : Controls)
{
CWnd *b = GetDlgItem(c);
if (b)
b->EnableWindow(FALSE);
}
然而,如果你不具备这种控件的容器,但不知何故想还是迭代然后所有的控件:
CWnd *c = GetWindow(GW_CHILD);
while (c)
{
c->EnableWindow(FALSE);
c = c->GetNextWindow(GW_HWNDNEXT);
}
我推荐的第一选择,因为这样你可以具体你要修改的控制。如果你只想要按钮,第二个选项将会非常棘手。
你使用的是什么框架? MFC? –
在如何转换foreach或如何实际使按钮在C++中工作?一个是微不足道的,一个不是。 –
我想为C++转换foreach循环 –