我如何复制到列表?

时间:2013-05-08 20:19:20

标签: c++-cli

我在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]);

        }

这是C:

中的Encoder_GetCurrentCodecPixFmts函数
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 这个新类中的构造函数应该是空的,但我需要在某个地方为List创建一个新的列表实例。

现在在C ++中我需要从pix_fmts char数组转换到codec-&gt;支持 或者从pix_fmts复制到:List

所以我按上述方式做了:

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

但我不确定这是否意味着复制。

这是对的吗?

1 个答案:

答案 0 :(得分:1)

它有效,它是一种deep copy。是什么让你觉得它不起作用?结果错了吗?如果他们这样做,在那里放一个断点并试图弄错。

您可以使用Enumerable::ToList扩展方法,而不是逐个复制。

我希望这对你有所帮助。