使用C++MexFunctions在MatLab中显示C++输出[复制]

zpjtge22  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(179)

这个问题在这里已经有答案

Correctly over-loading a stringbuf to replace cout in a MATLAB mex file(4个答案)
上个月关门了。
我有一个关于在MatLab中显示C输出的问题。我编写了一个Mex函数,以便在MATLAB中包含我的C算法,但在MATLAB中显示我的输出时遇到了问题。C++mex函数调用生成我的输出的其他类。为了让事情简单明了,这里有一个例子。
Mexunction.cpp:

#include "mex.hpp"
#include "mexAdapter.hpp" 
#include "Helper.h"
class MexFunction : public matlab::mex::Function {
public:
    void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
        // Function implementation
        ...
            Helper();
        }
};

(Helper类,在Mexunction.cpp中调用)

#ifndef HELPER_H
#define HELPER_H
#include <iostream>
class Helper
{
public:
    Helper()
    {
        std::cout << "Hello World" << std::endl; 
    }
};
#endif

如何在matlab命令窗口中显示字符串"Hello world"

gupuwyp2

gupuwyp21#

对于C-MEX文件,您需要使用mexPrintf函数,换句话说

#include "mex.h" // for mexPrintf

class Helper
{
public:
    Helper()
    {
        mexPrintf("Hello World\n"); 
    }
};

在一个C++MEX文件中,我刚刚使用R2022a在Linux和Windows上尝试了以下操作。对std::cout的直接调用可以正常工作,但如果您在不同的线程上,事情就不能正常工作--这会是问题所在吗?

#include "mex.hpp"
#include "mexAdapter.hpp"

#include <iostream>
#include <thread>

class MexFunction : public matlab::mex::Function {
public:
    void operator()(matlab::mex::ArgumentList, matlab::mex::ArgumentList) {
        std::cout << "Hello, world!\n";
        std::thread t {[]() { std::cout << "This doesn't work.\n"; }};
        t.detach();
    }
};

相关问题