c# - 从 C# 调用托管 C++ 中的 vector

标签 c# c++ vector managed-c++

我想要一个包含多个独立变量的 vector 。在我的 C++ header(.h) 中,我这样定义它:

private:
    // Static data structure holding independent variables
    static vector<double>* indVariables;

在我的 .cpp 文件中,它的定义相同,然后我将不得不在其他一些函数中使用这个 vector ,如下所示:

static vector<double>* indVariables;

void fun(int m, int n)
{
    for (i = 0; i < m; ++i)
    {
        ai = indVariables[i];

        temp = exp(-n * (ai - 8.0));
    }
} /* fun */

现在在 C# 中,我想将一组数字复制到此 vector 并将其调回 C++,如下所示:

var matu = new double[]{ 8.0, 8.0, 10.0, 10.0, 10.0, 10.0};
myCppClass.indVariables = matu;

我该怎么做?

第一个问题是因为它是私有(private)的,我在 C# 中看不到它。我必须公开还是有其他方法?然后如何为这个 vector 赋值?

最佳答案

它是私有(private)的这一事实确实存在一个问题,但是,我认为将其公开不仅可以解决您的问题。正如 Richard 所说,C# 不知道 std::vector 是什么。我不太了解您的代码结构、代码的作用、使用方式等,但是,如果您只需要将数字列表/数组分配给 vector ,则可以使用 List<>在您的 C# 代码中,并将 vector 的赋值包装在您的 CLI 项目/文件中,如下所示:

void Assign(Collections::Generic::List<double>^ l )
{
    IndVariables->clear();
    for each (double i in l)
    {  
        IndVariables->push_back(i);
    }
}

然后在您的 C# 程序中,您将编写(或者您已经声明了您的 List<>):

yourCppClass.Assign(new List<double>(){0.0, 42.0, 8.0});

您还可以添加额外的包装方法来操作或访问 vector 。同样,这可能适合也可能不适合,具体取决于您的代码结构。

关于c# - 从 C# 调用托管 C++ 中的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36182651/

相关文章:

c# - 从 Word 复制文本并从剪贴板获取文件位置

c++ - 为什么 'class'和 'main'中的相等表达式表现不同?

c# - 非泛型类型 'System.Collections.ArrayList' 不能与类型参数一起使用

c# - 防止对 FILESTREAM 进行写操作?

c++ - 确定来自不同设备的输入

c++ - 尝试使用unique_ptr的 vector 引用已删除的函数

haskell - Data.Vector 的 Monadic concatMap?

c++ - 将系统(char* 命令)的输出加载到变量,c++

c# - 以编程方式创建缓动函数 C#

c++ - 模板参数推导与 QT lambda 不匹配