c# - 托管 C++ 中的 List<Tuple<int, float>>

标签 c# c++ list tuples managed

我正在开发一些用 native C++ 编写的软件,带有托管 C++ 包装器和 C# 用户界面。我需要将一些信息从 native 代码一直传递到界面。我认为传递信息的最佳方式是在元组列表中。我知道在 native C++ 中我需要使用 list<tuple<..>>这很好用。我现在想做的是在包装器中获取输出,然后返回 List<Tuple<..>>这是 System::Collections::Generic::ListSystem::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/float。

编辑: 注意 ^ 运算符。这些表示 C++/CLI 引用类型。你会经常使用它们! (它有点像 * 用于常规 C++ 中的指针,但表示 GC 处理过的引用类型)

关于c# - 托管 C++ 中的 List<Tuple<int, float>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17677530/

相关文章:

c# - 如果我 'overwrite' 一个 List 和一个 'new' List,旧的被删除了吗?

单击图标时 Android DrawerLayout 崩溃

c# - 是否可以编写在 Excel 2003 和 2007 中都有效的插件?

c# - Release模式符号文件 .dll.mdb 中的 Fody 异常与程序集 .dll 不匹配

c++ - 如何在没有 reinterpret_cast 的情况下使用 dlsym() 加载函数?

c++ - c++ 和其他语言有 fiddle 类型的东西吗?

python - 比较一个字符串和一个整数

c# - 提取列表的 k 个最大元素

c# - 在 Visual Studio 2012 中添加对其他项目的引用

c++ - 重载构造函数的 Unresolved external symbol 错误