什么是 C++ 中的数组<T ^> ^T 以及如何从数组中提取值?

Posted

技术标签:

【中文标题】什么是 C++ 中的数组<T ^> ^T 以及如何从数组中提取值?【英文标题】:What is an array<T ^> ^T in C++ and how do I extract values from the array? 【发布时间】:2016-09-03 15:12:00 【问题描述】:

我将一组 C# 对象传递给托管 C++ DLL。 C# 类的定义如下:

  public class LatLonPointType
    

        public double Lat;       // Latitude.
        public double Lon;       // Longitude.
    

我将 LatLonPointTypes 数组传递给托管 C++ DLL 中的函数。通过反复试验,我发现我可以使用声明为的函数参数将其传递给 C++ 函数:

 array <LatLonPointType^> ^PolygonPoints

以下 C++ 代码将提取 LatLonPointType ^ 类型的元素。

LatLonPointType ^a = PolygonPoints[0];

我的问题是:

    我多年前使用过 C++,这似乎类似于引用声明 &。有没有很好的参考^?

    在上面的示例中,如何将 (LatLonPointType ^) 转换为 (LatLonPointType) 值?

澄清一下:

如果我有:

LatLonPointType ^a = PolygonPoints[i];

我如何获得 a.Lat 和 a.Lon?

我会使用 a->Lat 和 a->Lon 吗?

【问题讨论】:

In C++/CLI, what does the hat character ^ do?的可能重复 这不是 C++。这是微软对 C++ 标准的破坏。 至于2号,你为什么要这么做?这就像说将指针转换为对象。当然,您可以将托管指针指向非托管指针。 以下 C++ 代码将提取 LatLonPointType ^ 类型的元素。 -- 如果它真的不是 C++ 代码,它怎么能做到这一点? 嗨 Paul 和 Arnav - 我想我的问题是:我将如何在 LatLonPointType 中引用 LatLonPointType 的成员^。例如,如果我有一个 LatLonPointType ^a,我将如何获得 a.Lat 和 a.Lon? 【参考方案1】:

根据this answer,这个帽子字符,又名^,创建了一个托管指针,它将被垃圾收集,不一定由你。例如,如果您要使用new 创建一个本机对象,它将如下所示:

Object* obj = new Object();

但如果您使用托管指针,则语法将更改为:

MObject^ mobj = gcnew MObject();

目前,我找不到如何将托管指针转换为对象本身,但如果要将其转换为指向对象的非托管指针,请参阅this answer。

编辑 要访问类的成员,例如Lon,您可以这样做:

//Get method
double i = PolygonPoints[n]->Lon;
//Set method
PolygonPoints[n]->Lon = number;

【讨论】:

以上是关于什么是 C++ 中的数组<T ^> ^T 以及如何从数组中提取值?的主要内容,如果未能解决你的问题,请参考以下文章

C++循环结构

如何在 C++ 中使用数组?

如何在 C++ 中使用数组?

如何在 C++ 中使用数组?

如何在 C++ 中使用数组?

理解 C++ 中的 <string> 字符串数组