2013-05-08 53 views
0

我在CLI這段代碼如何複製到一個列表?

List<Codec^> ^GetCodecs() 
{ 
    List<Codec^> ^l = gcnew List<Codec^>; 


    bool KeepLooping = Encoder_MoveToFirstCodec(); 
    while (KeepLooping) 
    { 
     Codec ^codec = gcnew Codec(); // here... and that call encoder_init many times... which call register codec many times... which is a mass... 

     codec->Name = gcnew String(Encoder_GetCurrentCodecName()); 
     codec->Type = Encoder_GetCurrentCodecType(); 

     char pix_fmts[200]; // array of 200 is probably enough 
     int actual_pix_fmts_sz = Encoder_GetCurrentCodecPixFmts(pix_fmts , 200); 

     for (int i = 0 ; i < actual_pix_fmts_sz ; i++) 
     { 
      //copy from pix_fmts to the :List 

      codec->SupportedPixelFormats->Add(pix_fmts[i]); 

     } 

這是Encoder_GetCurrentCodecPixFmts功能在C:

int Encoder_GetCurrentCodecPixFmts(char *outbuf , int buf_sz) 
{ 
    int i=0; 
    while ((i<buf_sz) && (codec->pix_fmts[i]!=-1)) 
    { 
     outbuf[i] = codec->pix_fmts[i]; 
     i++; 
    } 
    return i; 
} 

這是一類新我所做的:

#pragma once 

using namespace System; 
using namespace System::Collections::Generic; 

public ref class Codec 
{ 
public: 
    String^ Name; 
    int ID; // this is the index 
    int Type; // this is the type 
    List<int> ^SupportedPixelFormats; 


    Codec(void) 
    { 
     SupportedPixelFormats = gcnew List<int>; 
     // do nothing in the constructor; 
    } 

}; 

其中包含也是: SupportedPixelFormats 在這個新類的構造函數應該是空的,但我需要的地方,以便爲列表中進行NE實例W爲列表。

現在在C++我需要從pix_fmts字符數組轉移到codec->支持 或者從pix_fmts複製到:列表

,所以我做如上:

codec->SupportedPixelFormats->Add(pix_fmts[i]); 

但我我不確定這是否意味着複製。

,對不對我做了什麼?

+1

@ H2CO3你知道當你與水混合酸會發生什麼:d – Shark 2013-05-08 20:24:04

回答

1

它的工作原理,它是一種一deep copy的。是什麼讓你覺得它不起作用?結果是錯誤的嗎?如果他們這樣做,在那裏放置一個斷點,並試圖弄清楚什麼是錯的。

而是由一個一個複製也許你可以使用Enumerable::ToList擴展方法。

我希望這對你有所幫助。

相關問題