是否可以使用C ++ / CX在WinRT中创建一个数组数组?

时间:2013-05-12 16:11:48

标签: arrays multidimensional-array windows-runtime c++-cx

我现在每天都在讨论这个话题。我尝试使用VectorsIVectorsArrays

在WinRT中,

Arrays的维度不能超过1,Vectors似乎无法在公共环境中使用。 (如果你能告诉我怎么做,请做!)和IVectors是接口,所以你不能IVector IVectors

是否有任何,我的意思是任何方式来制作一个真正的二维数组或像C ++ / CLI那样的数组数组吗

(是的,我知道我可以用一维数组模拟2维,但我真的不想这样做。)

1 个答案:

答案 0 :(得分:3)

我使用此解决方法来解决此问题。不漂亮,但功能齐全。

而不是创建向量矢量创建对象矢量。然后使用safe_cast访问包含Vector中的Vectors。

Platform::Collections::Vector<Object^ >^ lArrayWithinArray = ref new Platform::Collections::Vector<Object^ >();

//Prepare some test data
Platform::Collections::Vector<Platform::String^>^ lStrings = ref new  Platform::Collections::Vector<Platform::String^>();
lStrings->Append(L"One");
lStrings->Append(L"Two");
lStrings->Append(L"Three");
lStrings->Append(L"Four");
lStrings->Append(L"Five");

//We will use this to show that it works
Platform::String^ lOutput = L"";

//Populate the containing Vector
for(int i = 0; i < 5; i++)
{
    lArrayWithinArray->Append(ref new Platform::Collections::Vector<String^>());

    //Populate each Vector within the containing Vector with test data
    for(int j = 0; j < 5; j++)
    {
        //Use safe_cast to cast the Object as a Vector
        safe_cast<Platform::Collections::Vector<Platform::String^>^>(lArrayWithinArray->GetAt(i))->Append(lStrings->GetAt(j));
    }
}

//Test loop to verify our content
for(int i = 0; i < 5; i++)
{
    for(int j = 0; j < 5; j++)
    {
        lOutput += lStrings->GetAt(i) + L":" + safe_cast<Platform::Collections::Vector<Platform::String^>^>(lArrayWithinArray->GetAt(i))->GetAt(j) + ", ";
    }
}