我正在开发一些软件,这些软件是用本机C++编写的,带有托管C++包装器和C#中的用户界面。我需要将一些信息从本机代码一直传递到接口。我能想到的传递信息的最好方法是在元组列表中。我知道在本机C++中我需要使用list<tuple<..>>
,这很好。我现在想做的是在包装器中获取输出,并返回一个List<Tuple<..>>
,它是System::Collections::Generic::List
和System::Tuple
,而不是来自本机的stl。我知道这些列表在语法上非常不同,但这不应该是问题所在。在C#代码中,编译器接受List<Tuple<..>>
,但在托管C++代码中则不接受。我是不是做错了/我使用了错误的数据类型?任何帮助都会很棒!
试试这样的东西:
using namespace System::Collections::Generic;
// A List<Tuple<int, float>> in managed C++
public ref class TupleTest
{
public:
static List<Tuple<int, float>^>^ GetTuple() {
List<Tuple<int, float>^>^ ret = gcnew List<Tuple<int,float>^>();
Tuple<int,float>^ t = gcnew Tuple<int,float>(5, 2.6);
ret->Add(t);
return ret;
}
};
注意:如果您愿意,可以使用Int32和Single(或Double)而不是int/foat。
编辑:请注意^
运算符。这些表示C++/CLI引用类型。你会经常使用它们的!(这有点像普通C++中指针的*
,但表示GC的引用类型)