c -cli – 如何创建包含按值传递的List(或类似)的CLI值类?

我们有一个C库,它使用包含结构的STL向量的结构,如下所示:

struct Params
{
    // values...
}

struct Settings
{
    std::vector<Params> m_params;

    // values...
}

我正在为库编写CLI包装器,我想要上述结构类型的等价物.我一直在考虑使用List作为向量的等价物,如下所示:

public value struct Params
{
    // values...
}

public value struct Settings
{
    List<Params>^ Params;

    // values...
}

但是由于List< T>是一个引用类型,列表通过引用而不是值传递.有没有办法创建一个CLI类,其中包含按值传递的列表(或类似)以及其他成员?

最佳答案 我同意mcdave的回答,归结为你所要求的不受支持.

我推测你的主要观点不是获得实际的传值,而是更多地获得按值传递的行为.想想System.String.这不是一个真正的值类型,但你可以安全地传递引用,因为字符串不能被修改,你只能创建新的.

要使列表相同,可以使Params成为IList< Param>类型的属性.分配时,将内容复制到新的列表< Param>并存储调用AsReadOnly()时得到的IList指针.从现在开始,IList指向一个无法修改的对象.如果结构是通过值传递的,那么指针将被复制,但这是正常的,因为它指向一些不可变的东西.如果你的对象经常传递,它也会更快,因为每次都不需要深度复制.

点赞