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;
}