什么是 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 以及如何从数组中提取值?的主要内容,如果未能解决你的问题,请参考以下文章