是否可以用c++ /CX在WinRT中创建数组的数组?



我每天都在纠结这个话题。我尝试使用Vectors, IVectorsArrays

Arrays不能在WinRT中具有比1更高的维度,Vectors似乎不可能在公共上下文中使用。(如果你能告诉我怎么做,请告诉我!)和IVectors是接口,所以你不能做IVectorsIVector

是否有任何,我的意思是任何方法来创建一个真正的二维数组或数组的数组,就像在c++/CLI中一样?

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

我使用这个解决方案来解决这个问题。不漂亮,但很实用。

与其创建Vector of Vectors,不如创建Vector of Objects。然后使用safe_cast访问包含Vector的Vector中的Vector。

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) + ", ";
    }
}

相关内容

  • 没有找到相关文章

最新更新