C++ cli 初始化C++/CLI结构数组 我希望部分初始化像C++ POD类型那样的结构数组。字符串^通常是char *,但托管C++不允许。 #include "stdafx.h" using namespace System; ref struct Field { String^ name; int fences; int length; }; int main(array<System::String ^> ^args) { array<Field^>^ farm = { { "eenie", 10 }, { "meenie", 20 }, { "miny", 4 } }; for each (Field^ field in farm) { field->length = field->fences * 22; } return 0; }
所以我试过了C++ cli 初始化C++/CLI结构数组 我希望部分初始化像C++ POD类型那样的结构数组。字符串^通常是char *,但托管C++不允许。 #include "stdafx.h" using namespace System; ref struct Field { String^ name; int fences; int length; }; int main(array<System::String ^> ^args) { array<Field^>^ farm = { { "eenie", 10 }, { "meenie", 20 }, { "miny", 4 } }; for each (Field^ field in farm) { field->length = field->fences * 22; } return 0; },c++-cli,C++ Cli,所以我试过了 #include "stdafx.h" using namespace System; ref struct Field { String^ name; int fences; int length; }; int main(array<System::String ^> ^args) { array<Field^>^ farm = { { String("eenie
#include "stdafx.h"
using namespace System;
ref struct Field
{
String^ name;
int fences;
int length;
};
int main(array<System::String ^> ^args)
{
array<Field^>^ farm =
{
{ String("eenie"), 10 },
{ String("meenie"), 20 },
{ String("miny"), 4 }
};
for each (Field^ field in farm)
{
field->length = field->fences * 22;
}
return 0;
}
我看过的几乎每个例子都只告诉我们如何初始化字符串或整数数组。我还没有找到初始化包含字符串的结构数组的方法
有没有一种简单的方法可以做到这一点,或者我必须创建一个特殊的构造函数并新建每个元素?我发现我可以用一个特殊的构造函数新建每个元素。有没有类似于POD初始化的更简单的方法
#include "stdafx.h"
using namespace System;
ref struct Field
{
String^ name;
int fences;
int length;
Field(String^ x, int in_fences)
{
name = x;
fences = in_fences;
}
};
int main(array<System::String ^> ^args)
{
array<Field^>^ farm =
{
gcnew Field("eenie", 10 ),
gcnew Field("meenie", 20 ),
gcnew Field("miny", 4 )
};
for each (Field^ field in farm)
{
field->length = field->fences * 22;
}
return 0;
}
#包括“stdafx.h”
使用名称空间系统;
ref结构字段
{
字符串^name;
内部围栏;
整数长度;
字段(字符串^x,int in_fences)
{
name=x;
围栏=in_围栏;
}
};
int main(数组^args)
{
数组^farm=
{
gcnew字段(“eenie”,10),
gcnew油田(“meenie”,20),
gcnew字段(“miny”,4)
};
对于每个(场中的场^Field)
{
场地->长度=场地->围栏*22;
}
返回0;
}
或者,如果字段更改为值而不是引用
#include "stdafx.h"
using namespace System;
value struct Field
{
String^ name;
int fences;
int length;
Field(String^ x, int in_fences)
{
name = x;
fences = in_fences;
}
void Init()
{
length = fences * 22;
}
};
int main(array<System::String ^> ^args)
{
array<Field>^ farm =
{
Field("eenie", 10 ),
Field("meenie", 20 ),
Field("miny", 4 )
};
for each (Field% field in farm)
{
field.Init();
}
return 0;
}
#包括“stdafx.h”
使用名称空间系统;
值结构字段
{
字符串^name;
内部围栏;
整数长度;
字段(字符串^x,int in_fences)
{
name=x;
围栏=in_围栏;
}
void Init()
{
长度=围栏*22;
}
};
int main(数组^args)
{
数组^farm=
{
字段(“eenie”,10),
字段(“meenie”,20),
字段(“miny”,4)
};
对于每个字段(场中的字段百分比)
{
field.Init();
}
返回0;
}
这比gcnewing每个字段稍微好一些。确保您了解使用
值结构的含义以及它如何改变行为。我在C++/CLI中经常看到的一点是,它很少优雅。它是为工作而设计的,但仅此而已(C#所做的一切都很简单和简洁,通常是不存在的)。是的,我理解ref和value之间的差异和陷阱。因为WinForms,我被迫使用C++/CLI。可以混合C++和C++ +CLI,但是如果所有代码都在同一种语言中,则更容易。我只使用C++和CLI作为NET++和C++代码之间的桥梁(我自己或库中)。我宁愿使用三种语言,也不愿使用笨重的C++/CLI语法。
#include "stdafx.h"
using namespace System;
ref struct Field
{
String^ name;
int fences;
int length;
Field(String^ x, int in_fences)
{
name = x;
fences = in_fences;
}
};
int main(array<System::String ^> ^args)
{
array<Field^>^ farm =
{
gcnew Field("eenie", 10 ),
gcnew Field("meenie", 20 ),
gcnew Field("miny", 4 )
};
for each (Field^ field in farm)
{
field->length = field->fences * 22;
}
return 0;
}
#include "stdafx.h"
using namespace System;
value struct Field
{
String^ name;
int fences;
int length;
Field(String^ x, int in_fences)
{
name = x;
fences = in_fences;
}
void Init()
{
length = fences * 22;
}
};
int main(array<System::String ^> ^args)
{
array<Field>^ farm =
{
Field("eenie", 10 ),
Field("meenie", 20 ),
Field("miny", 4 )
};
for each (Field% field in farm)
{
field.Init();
}
return 0;
}