我们有一个 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的。这是不是一个真正的价值类型,但是你可以通过引用各地安全,因为字符串不能修改,只能结交新朋友。

要得到一个列表相同,可以使型ParamsIList<Param>的属性。当分配给它,将内容复制到一个新的List<Param>和存储IList指针调用AsReadOnly()当你。从现在起,IList指向不能被修改的对象。如果结构是按值传递,指针会被复制,但没关系,因为它指向的东西是不可改变的。如果你的对象被周围很多过去了,这也将是更快,因为没有必要为一个deepcopy的每次。

scroll top