Main Content

MATLAB 명령 창에 출력값 표시하기

MEX 함수는 MATLAB® 명령 창에 출력값을 표시할 수 있습니다. 하지만, 일부 컴파일러에서는 MEX 함수에서 std::cout를 사용하는 것을 지원하지 않습니다. 또는 std::ostringstream 및 MATLAB fprintf 함수를 사용하여 MATLAB 명령 창에 텍스트를 표시할 수도 있습니다.

다음 MEX 함수는 단순히 해당 함수에 입력값으로 전달된 텍스트 및 숫자형 값을 반환합니다. 인수는 char형 및 double형인 것으로 간주됩니다. 단순성을 유지하기 위해 오류 검사는 생략됩니다.

MEX 함수가 MATLAB 명령 창에 텍스트를 표시하는 방법은 다음과 같습니다.

  • 이름을 stream으로 하여 std::ostringstream의 인스턴스를 만듭니다.

  • 표시할 데이터를 stream에 삽입합니다.

  • stream 객체와 함께 displayOnMATLAB을 호출합니다.

displayOnMATLAB 멤버 함수는 스트림 콘텐츠를 fprintf에 전달한 후 스트림 버퍼를 지웁니다. displayOnMATLAB에 대한 후속 호출에 stream 객체를 재사용할 수 있습니다.

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

using matlab::mex::ArgumentList;
using namespace matlab::data;

class MexFunction : public matlab::mex::Function {
    // Pointer to MATLAB engine to call fprintf
    std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();

    // Factory to create MATLAB data arrays
    ArrayFactory factory;

    // Create an output stream
    std::ostringstream stream;
public:
    void operator()(ArgumentList outputs, ArgumentList inputs) {
        const CharArray name = inputs[0];
        const TypedArray<double> number = inputs[1];
        stream << "Here is the name/value pair that you entered." << std::endl;
        displayOnMATLAB(stream);
        stream << name.toAscii() << ": " << double(number[0]) << std::endl;
        displayOnMATLAB(stream);
    }

    void displayOnMATLAB(std::ostringstream& stream) {
        // Pass stream content to MATLAB fprintf function
        matlabPtr->feval(u"fprintf", 0,
            std::vector<Array>({ factory.createScalar(stream.str()) }));
        // Clear stream buffer
        stream.str("");
    }
};

MATLAB에서 MEX 함수(이 예제에서는 streamOutput.cpp)를 호출하면 다음 결과가 생성됩니다.

mex streamOutput.cpp
streamOutput('Total',153)
Here is the name/value pair that you entered.
Total: 153

참고 항목

|

관련 항목