Main Content

C++ MEX 함수

MEX, 즉 MATLAB 실행 파일은 다른 MATLAB® 함수처럼 자동으로 불러와 호출할 수 있는 프로그램을 뜻합니다.

C++ MEX API

C++ MEX 함수는 다음 두 개의 C++ API를 기반으로 합니다.

  • MATLAB Data API는 MATLAB 데이터형과 최적화(예: MEX 함수에 전달된 데이터 배열을 위한 쓰기 시 복사(copy-on-write))를 지원합니다. 자세한 내용은 C++용 MATLAB Data API 항목을 참조하십시오.

  • 일부 MATLAB C++ Engine API는 MATLAB 함수 호출, MATLAB 작업 공간에서의 명령문 실행, 변수와 객체에 대한 액세스를 지원합니다. 자세한 내용은 C++ MEX API 항목을 참조하십시오.

C++ MEX API는 C++11 기능을 지원하며, C MEX API와 호환되지 않습니다. 하나의 MEX 파일에서 이들 API를 섞어 사용할 수 없습니다.

C++ MEX 함수의 기본 설계

C++ MEX 함수는 matlab::mex::Function에서 상속되는 MexFunction 클래스로 구현됩니다. MexFunction 클래스는 함수 호출 연산자 operator()를 재정의합니다. 이런 구현을 통해 함수처럼 호출할 수 있는 함수 객체가 생성됩니다.

MATLAB에서 MEX 함수를 호출하면 함수 객체가 인스턴스화되며, 이후에 동일한 MEX 함수를 호출할 때 함수 객체의 상태가 유지됩니다.

다음은 C++ MEX 함수의 기본 설계입니다. 이는 matlab::mex::Function의 서브클래스로, 이름은 MexFunction이어야 합니다. MexFunction 클래스는 함수 호출 연산자 operator()를 재정의합니다.

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

class MexFunction : public matlab::mex::Function {
public:
    void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
        // Function implementation
        ...
    }
};

MEX 함수의 입력값과 출력값은 matlab::mex::ArgumentList의 요소로 전달됩니다. 각 입력 인수와 출력 인수는 matlab::mex::ArgumentList에 포함된 matlab::data::Array입니다.

예제는 C++ MEX 소스 파일 만들기 항목을 참조하십시오.

MATLAB에서 MEX 함수 호출하기

MEX 함수를 호출하려면 파일 확장자를 제외한 파일 이름을 사용하여 호출하십시오. 호출 구문은 MEX 함수에 의해 정의된 입력 인수와 출력 인수에 따라 다릅니다. 호출 시 MEX 파일은 MATLAB 경로 또는 현재 작업 폴더에 있어야 합니다.

C++ MEX 함수 예제

이 예제에서는 C++ MEX 함수를 구현하는 방법을 보여줍니다.

  • arrayProduct.cpp — 배열과 스칼라 입력값을 곱한 후 결과로 나타나는 배열을 반환합니다.

  • yprime.cpp — 제한된 3체 문제의 미분 방정식을 정의합니다.

  • phonebook.cpp — 구조체를 조작하는 방법을 보여줍니다.

  • modifyObjectProperty.cpp — MATLAB에서 사용하는 방법을 보여줍니다.

관련 항목