matlab 判断元素索引_C++/MATLAB 联合编程:C++中调用MATLAB编译出来的动态库

目录

前言mwArrayBrief构造函数成员方法C++ 调用 MATLAB 实例前期准备无返回值有返回值注意事项

前言

之前我写过一篇 MATLAB与C语言的混合编程,那个是用 mex 命令 来编译 .C 文件 生成 .mexw64 文件来给 MATLAB 调用。注意啊,是在 MATLAB中 调用 C函数。

现在,在这偏推送里讲的是:在 C++中 调用 MATLAB函数 !

其实,我之前也没怎么学在C++中调用MATLAB,突然学这个是因为 上上周老师催着要一个原型发给客户。但是核心的算法目前仅仅是用MATLAB验证了正确性,还没有用C++写。如果核心的算法用 C++ 来写的话估计要花好久(毕竟也就学了一个学期多点的C++)。所以为了赶时间,我就打算用 MATLAB 把核心的算法打包成动态,然后拿去给C++调用。

简单展示下还没做完的东西吧:

8acd8e79318cf7c715065367721b2a83.png

4288a944b9ef4df71772018c2d14ff92.png

不多说废话了,进入正题。

mwArray

关于 mwArray 的构造函数 以及 其成员方法 部分,完全是按照官网上的 文档复制过来的,有一些关于稀疏矩阵的方法我这里没放,我平时也没解过大型的方程组,所以稀疏矩阵这块也没怎么用,也就没有花时间去了解它。

Brief

Class used to pass input/output arguments to C++ functions generated by MATLAB Compiler SDK

用于将输入/输出参数传递给由MATLAB Compiler SDK生成的C ++函数的类。

使用mwArray类将输入/输出参数传递给由MATLAB生成的 C++ 接口函数。在MATLAB中所有的数据均由数组表示,这个类就是是对MATLAB中数组的封装。mwArray类提供必一些构造函数,方法以及运算符,用于数组的创建和初始化 以及 简单索引方式取值。

构造函数

1. 创建 空的 数组

/// 空的 数组,元素类型预定为 double; 构造函数:mwArray(mxClassID mxID)
mwArray a(mxDOUBLE_CLASS);

/// Note:mxClassID有以下若干种(下同)
mxDOUBLE_CLASS

mxSINGLE_CLASS

mxINT8_CLASS

mxUINT8_CLASS

mxINT16_CLASS

mxUINT16_CLASS

mxINT32_CLASS

mxUINT32_CLASS

mxINT64_CLASS

mxUINT64_CLASS

2. 二维数组

/// 二维数组 构造函数:mwArray(mwSize num_rows, mwSize num_cols, mxClassID mxID, mxComplexity cmplx = mxREAL)
//  行 和 列 都是 mwSize 类型的值,mwSize 是 size_t 的 typedef,
//  size_t 在win64种是 unsigned __int64 的typedef;在其他中是 unsigned int 的typedef
mwSize num_rows = 3;
mwSize num_cols = 3;
mwArray b(num_rows, num_cols, mxDOUBLE_CLASS);

3. 三维数组/多维数组

/// 三维数组 mwArray(mwSize num_dims, const mwSize* dims, mxClassID mxID, mxComplexity cmplx = mxREAL)
mwSize num_dims = 3;                // 数组的维数
const mwSize dims[3] = { 5, 5, 3};   // 每个维度具体的值
mwArray c(num_dims, dims, mxDOUBLE_CLASS);

其实 二维数组 也可以用这样的方式来创建

4. 一维字符数组(字符串)

/// 一维字符数组 mwArray(const char* str)
std::string str = "Mitch Hong";
mwArray d(str.c_str());

5. 多行字符串

/// 多行字符串,不要求每行字符个数相等 mwArray(mwSize num_strings,const char ** str)
const mwSize num_strings = 3;
const char* strs[num_strings] = { "Mitch", "Hong", "Miao"};
mwArray e(num_strings, strs);

6. 结构体数组

/// 二维 结构体数组 mwArray(mwSize num_rows, mwSize num_cols, int num_fields, const char** fieldnames)
//  Note: 结构体的每个 域值 也 必须是 mwArray 类型。在后面 方法30 中写了一个 设置结构体域值的例子
num_rows = 2;  // 前面声明且定义过,这里直接赋值
num_cols = 2;  // 前面声明且定义过,这里直接赋值
int num_fields = 2;
const char* fields[2] = { "Name", "Sex"};
mwArray f(num_rows, num_cols, num_fields, fields);

这个可能稍微难理解一点,多看几眼这个构造函数,这个构造函数就是说明结构体数组有 几行 几列,几个域名,每个域名具体是什么。对于结构体值的设置,看一下下面的第30个成员方法。

7. 多维结构体数组

略,我都没碰见过,就不写这个了。

8. 拷贝构造函数(深拷贝)

mwArray(const mwArray& arr)

9. 标量

/// 标量 实数:mwArray( re);虚数:mwArray( re,  im)
mwArray g(mxDouble);
mwArray h(mxDouble, mxDouble);
成员方法

基本复制的官网上的,基本都没改。

1. 深拷贝 mwArray Clone() const

mwArray a(2, 2, mxDOUBLE_CLASS);
mwArray b = a.Clone();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值